十三. [博学谷学习记录]|超强总结,用心分享|大数据 Linux(十三)

102 阅读1分钟

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" c=a" c**=((** a+b ))d= **[a+b]echo "c=[a** **+** b **]****echo** "c = 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 ] then mkdir pDIR**  **]**  **then** **mkdir** -p **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**=** [23]num2=[2** ***** 3 **]**num2**=** **[1 + 5 **]**if test  num1 eqnum1** **-**eq **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  [   a a** - **b  ]  then echo "a 等于 b" elif  [   a gta** **-**gt **b  ]  then echo "a 大于 b" elif  [   a lta** **-**lt **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  (ls/root)do         echo (ls /root)****do**         **echo**  **file  done