1.1.1. 例子
test11.sh
#!/bin/basha**=4b=20#加法运算echo** expr $a + $b#减法运算echo expr $a - $b#乘法运算,注意*号前面需要反斜杠echo expr $a \* $b#除法运算echo expr $a / $b#此外,还可以通过[]进行算术运算。echo "a = ((** a+b ))d= **c" echo "d = $d" |
|---|
1.1. 流程控制
Shell提供了丰富的语句判断方式,包括数字,字符串和文件。
1.1.1. 语句判断
1.1.1.1. 数字:
| 运算符 | 说明 |
|---|---|
| -eq | 检测两个数是否相等,相等返回 true。 |
| -ne | 检测两个数是否不相等,不相等返回 true。 |
| -gt | 检测左边的数是否大于右边的,如果是,则返回 true。 |
| -lt | 检测左边的数是否小于右边的,如果是,则返回 true。 |
| -ge | 检测左边的数是否大于等于右边的,如果是,则返回 true。 |
| -le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 |
1.1.1.2. 字符串:
| 判断 符 | 说明 |
|---|---|
| -n STRING | 字符串长度不为零 |
| -z STRING | 字符串长度为0 |
| = | 判断两个字符串是否一样 |
| != | 判断两个字符串是否不一样 |
1.1.1.3. 文件
| 判断 符 | 说明 |
|---|---|
| -f | 存在且是普通文件 |
| -d | 存在且是目录 |
| -h | 存在且是符号链接 |
| -e | 文件存在 |
| –r | 文件存在并且可读 |
| –w | 文件存在并且可写 |
| –x | 文件存在并且可执行 |
1.1.2. if 语句
1.1.2.1. if
if 语句语法格式:
| if conditionthen command1 command2 ... commandNfi |
|---|
例子:
1)判断当前系统是否有多个ssh进程,如果有则打印true
test12.sh
| #!/bin/bashif [ $(ps -ef | grep -c "ssh") **-**gt 1 **]**then echo "true" fi | | -------------------------------------------------------------------------------------------------------------- |
解释:grep -c 用来统计字符串出现的次数
2)判断/media/cdrom文件是否存在,若不存在就去创建这个目录
test13.sh
| #!/bin/bash DIR**=**"/media/cdrom" if [ ! -e DIR fi |
|---|
1.1.2.2. if else****
if else 语法格式:
| if conditionthen command1 command2 ... commandNelse commandfi |
|---|
实例:****
1) 根据年龄判断是否成年
test14.sh
| #!/bin/bashread -p "Enter your age(1-100):" ageif [ $age **-**ge 18 ]then echo '已经成年!'else echo '未成年!'fi |
|---|
2)if else语句经常与test命令结合使用
test 命令允许你做各种测试并在测试成功或失败时返回它的退出状态码(为0表示为真,为1表示为假)。使用这个状态码,可以让 Bash 对测试的结果做出反应。
test 命令的语法为:
test EXPRESSION****
或
[ EXPRESSION ]****
test15.sh
| #!/bin/bashnum1**=** [1 + 5 **]**if test num2****then echo '两个数字相等!'else echo '两个数字不相等!'fi |
|---|
1.1.2.3. if else-if else****
if else-if else 语法格式:
| if condition1then command1elif condition2then command2else commandNfi |
|---|
实例:****
1)以下实例判断两个变量是否相等:
test16.sh
| #!/bin/bash echo "请输入a的值:" read a echo "请输入b的值:" read bif [ b ] then echo "a 等于 b" elif [ b ] then echo "a 大于 b" elif [ b ] then echo "a 小于 b" else echo "没有符合的条件" fi |
|---|
2)输入成绩,判断成绩“优”“良”“中”
test17.sh
| #!/bin/bashread -p "Enter your score(0-100):" n #-p参数表示给出提示信息if [ n** **-**ge 85 **]** **&&** **[** **n **-**le 100 ] ; then echo "优"elif [ n** **-**ge 70 **]** **&&** **[** **n **-**le 84 ] ; then echo "良"elif [ n** **-**ge 60 **]** **&&** **[** **n **-**le 69 ] ; then echo "中"else echo "差" fi |
|---|
1.1.3. for 循环****
与其他编程语言类似,Shell支持for循环。
1.1.3.1. 格式1-字符型循环****
for循环一般格式为:
| for 变量 in 值1 值2 值3…do程序done |
|---|
当变量值在列表里,for循环即执行一次所有命令,使用变量名获取列表中的当前取值。命令可为任何有效的shell命令和语句。in列表可以包含替换、字符串和文件名。
in列表是可选的,如果不用它,for循环使用命令行的位置参数。
实例:****
1) 顺序输出当前列表中的数字:
test18.sh
| #!/bin/bashfor loop in 1 2 3 4 5do echo "The value is: $loop"done |
|---|
输出结果:
| The value is: 1The value is: 2The value is: 3The value is: 4The value is: 5 |
|---|
2)顺序输出字符串中的字符
test19.sh
| #!/bin/bashfor str in 'This is a string'do echo $strdone |
|---|
输出结果:
| This is a string |
|---|
3)打印/root目录下所有文件的名字
test20.sh
| #!/bin/bash for file in file done |
|---|