介绍
Shell 是用C语言编写的程序,用户使用Linux桥接。Shell是命令语言,又是程序设计语言。访问操作系统内核服务。
Shell 入门学习
打开编辑器(vi/vim 命令来创建文件),新建test.sh,扩展名为sh。
第一个Shell脚本
./test.sh
如果有权限问题,则赋予脚本执行权限
chmod +x ./test.sh
#! 是一个约定的标记,需要什么解释器来执行。
echo 向窗口输出文本
变量
定义变量时
my_name="George"
注意:变量名和等号之间无空格。同时变量命名需要遵循如下规则
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
- 中间不能有空格,可以使用下划线(_)
- 不能使用标点符号
- 不能使用bash里的关键字(可以用help命令查看保留关键字)
除了显示地直赋值,也可以用语句赋值。
#!/bin/bash
# for file in $后边那个不是单引号,是左上角esc下的键,否则不起作用
for file in $`ls /Users/george/C`
do
echo $file
done
使用变量
#!/bin/bash
my_name="George"
echo $my_name
# 变量名外面的花括号是可选的
echo ${my_name}
只读变量
#!/bin/bash
# 只读变量
my_name="George"
readonly my_name
my_name="George1"
删除变量:
#!/bin/bash
# 变量被删除后不能被再次使用。unset 命令不能删除只读变量
my_name="George"
unset my_name
echo $my_name
变量类型:
运行shell时,同时存在三种变量
- 局部变量 脚本或者命令中定义,仅在当前shell例中有效,其他shell启动的程序不能访问局部变量
- 环境变量 所有程序,包括shell启动的程序
- shell变量 是由shell程序设定的特殊变量。shell变量中有一部分是环境变量,一部分是局部变量。
字符串
字符串可以用单引号或者双引号,也可以不用引号
单引号字符串限制:
- 任何字符都会原样输出,字符串中变量是无效的。
- 不能单独出现,可以成对出现字符串拼接
双引号优点: - 双引号里可以有变量
- 可以转义字符
数组
Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小
array_name=(value1 ... valuen)
#!/bin/bash
my_array=(A B "C" D)
echo "第1个元素为: ${my_array[0]}"
echo "第2个元素为: ${my_array[1]}"
echo "第3个元素为: ${my_array[2]}"
echo "第一个元素为: ${my_array[3]}"
# 使用@ 或 * 可以获取数组中所有元素
echo "数组的元素为 ${my_array[*]}"
echo "数组的元素为 ${my_array[@]}"
# 获取数组长度的方法与获取字符串长度的方法相同
echo "数组元素个数为 ${#my_array[*]}"
echo "数组元素个数为 ${#my_array[@]}"
运算符
支持多种运算符,包括:
- 算数
- 关系
- 布尔
- 字符串
- 文件测试
原生bash 不支持简单数学运算,可以通过其他命令实现。例如:awk和expr
express 是一款表达式计算工具
注意: - 表达式和运算符之间要有空格
- 完整的表达式要被 ` 包含(Esc键下的键)
算数运算符
运算符 | 说明 | 举例 |
---|---|---|
+ | 加法 |
expr $a + $b 结果为 30。 |
- | 减法 |
expr $a - $b 结果为 -10。 |
* | 乘法 |
expr $a \* $b 结果为 200。 |
/ | 除法 |
expr $b / $a 结果为 2。 |
% | 取余 |
expr $b % $a 结果为 0。 |
= | 赋值 | a=$b 将把变量 b 的值赋给 a。 |
== | 相等。用于比较两个数字,相同则返回 true。 | [ b ] 返回 false。 |
!= | 不相等。用于比较两个数字,不相同则返回 true。 | [ b ] 返回 true。 |
注意:条件表达式要放在方括号之间,并且要有空格
#!/bin/bash
a=10
b=10
val=`expr $a + $b`
echo "a + b: $val"
val=`expr $a - $b`
echo "a -b : $val"
val=`expr $b \* $a`
echo "a * b : $val"
val=`expr $b / $a`
echo "b / a : $val"
val=`expr $b % $a`
echo "b % a : $val"
if [ $a == $b ]
then
echo "a 等于 b"
fi
if [[ $a != $b ]];
then
echo "a 不等于 b"
fi
关系运算符
只支持数字,不支持字符串,除非字符串的值是数字。
运算符 | 说明 | 举例 |
---|---|---|
-eq | 检测两个数是否相等,相等返回 true。 | [ b ] 返回 false。 |
-ne | 检测两个数是否不相等,不相等返回 true。 | [ b ] 返回 true。 |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true。 | [ b ] 返回 false。 |
-lt | 检测左边的数是否小于右边的,如果是,则返回 true。 | [ b ] 返回 true。 |
-ge | 检测左边的数是否大于等于右边的,如果是,则返回 true。 | [ b ] 返回 false。 |
-le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | [ b ] 返回 true。 |
#!/bin/bash
a=10
b=20
if [ $a -eq $b ];
then
echo "$a -eq $b : a 等于 b"
else
echo "$a -eq $b a 不等于 b"
fi
if [ $a -ne $b ]
then
echo "$a -ne $b: a 不等于 b"
else
echo "$a -ne $b: a 等于 b"
fi
if [ $a -gt $b ]
then
echo "$a -gt $b: a大于b"
else
echo "$a -gt $b: a小于b"
fi
if [ $a -lt $b ]
then
echo "$a -lt $b: a小于b"
else
echo "$a -lt $b: a不小于b"
fi
if [ $a -ge $b ]
then
echo "$a -ge $b: a大于或等于b"
else
echo "$a -ge $b: a小于b"
fi
if [ $a -le $b ]
then
echo "$a -le $b: a小于或等于b"
else
echo "$a -le $b: a大于b"
fi
总结
一些shell的命令可以自行补充。
网友评论