shell脚本编程-使用结构化命令(if/else)(转)

11.1 使用if-then语句

  • 格式如下

    • if语句会执行if行定义的那个命令,如果该命令的退出状态码是0,则then部分的语句就会执行,其他值,则不会

1

2

3

4

if command

then

commands

fi

  • 在要执行的命令结尾加个分号,就能在同一行使用then语句了,格式如下

1

2

3

if command; then

commands

fi

11.2 if-then-else语句

  • 格式如下;

1

2

3

4

5

6

if command

then

commands

else

commands

fi

11.3 嵌套if

  • 格式如下:

1

2

3

4

5

6

7

if command1

then

commands

elif command2

then

more commands

fi

11.4 test命令

  • 格式如下

1

test condition

  • test用在if-then语句中

1

2

3

4

if test condition

then

commands

fi

  • bash shell提供了另一个在if-then语句中声明的test命令的方法

    • 方括号定义了test命令中用到的条件,注意方括号左右有一个空格

1

2

3

4

if [ condition ]

then

commands

fi

  • test命令可以判断3类条件:

    • 数值比较
    • 字符串比较
    • 文件比较

11.4.1 数值比较

  • test命令数值比较功能:
比较 说明
n1-eq n2 检查n1是否与n2相等
n1-ge n2 检查n1是否大于或等于n2
n1-gt n2 检查n1是否大于n2
n1-le n2 检查n1是否小于或等于n2
n1-lt n2 检查n1是否小于n2
n1-ne n2 检查n1是否不等于n2

– 数值条件测试可以用在数值和变量上

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

...

val1=10

val2=11

if [ $val1 -gt 5 ]

then

echo ...

fi

if [ $val1 -eq $val2 ]

then

echo ...

else

echo ...

fi

...

  • test命令无法处理变量中存储的浮点值,其处理的数仅有整数,当使用bc计数器时,可以让shell将浮点值作为字符串存储进一个变量

1

2

3

4

5

6

7

8

...

val1=`echo "scale = 4; 10 / 3" | bc`

if[ $val1 -gt 3 ]//运行脚本时会报错

then

echo ...

fi

...

11.4.2 字符串比较

  • test命令的字符串比较功能
比较 描述
str1 = str2 检查str1是否和str2相同
str1 = str2 检查str1是否和str2不同
str1 = str2 检查str1是否比str2小
str1 = str2 检查str1是否比str2大
-n str1 检查str1的长度是否非0
-z str1 检查str1的长度是否为0

– 比较字符串相等性:会将所有的标点和大写也考虑在内
– 字符串顺序注意事项:
– 大于小于符号必须转义,否则shell会把他们当做重定向符号而把字符串当做文件名
– 大于小于顺序和sort命令所采用的不同
– 在test命令中大写字母会被当成小于小写字母
– test命令使用标准的ASCII顺序,根据每个字符的ASCII数值来决定排序顺序
– 当将同样的字符串放进文件中并用sort命令排序时,小写字母会先出现
– sort命令使用系统的本地化语言设置中定义的排序顺

1

2

3

4

5

6

7

8

9

10

11

12

13

14

$cat test

#!/bin/bash

val1=baseball

val2=hockey

if [ $val1 \> $val2 ]

then

echo "$val1 is greater than $val2"

else

echo "$val1 is less than $val2"

fi

$

$./test

baseball is less than hockey

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

$cat test

#!/bin/bash

val1=Testing

val2=testing

if [ $val1 \> $val2 ]

then

echo "$val1 is greater than $val2"

else

echo "$val1 is less than $val2"

fi

$

$./test

Testing is less than testing

$sort testfile

testing

Testing

$

  • 字符串大小

    • -n和-z参数:检查一个变量是否含有数据

1

2

3

4

5

6

7

8

9

10

11

val1=testing

val2=‘ ‘

if [ -n "$val1" ] //检查val1变量是否长度非零

then

...

if [ -z "$val2" ] //检查val2变量是否长度为零

then

...

if [ -z "$val3" ] //检查val1变量是否长度非零,这个变量并未在shell脚本中定义过,所以说明字符串长度仍然为零

then

11.4.3 文件比较

  • test命令的文件比较功能
比较 描述
-d file 检查file是否存在并是一个目录
-e file 检查file是否存在
-f file 检查file是否存在并是一个文件
-r file 检查file是否存在并可读
-s file 检查file是否存在并非空
-w file 检查file是否存在并可写
-x file 检查file是否存在并可执行
-o file 检查file是否存在并属当前用户所有
-G file 检查file是否存在并且默认组与当前用户相同
file1 -nt file2 检查file是否比file2新
file1 -ot file2 检查file是否比file2旧

11.5 复合条件测试

  • fi-then语句允许使用布尔逻辑来组合测试

    • [ condition1 ] && [ condition2 ]
    • [ condition1 ] || [ condition2 ]

11.6 if-then的高级特性

  • 用于数学表达式的双尖括号
  • 用于高级字符串处理功能的双方括号

11.6.1 使用双尖括号

  • 双脚括号允许将高级数学表达式放入比较中
  • 格式:(( expression ))
    • expression:可以是任意的数学赋值或比较表达式
    • 如下常用的表达式
符号 描述
val++ 后增
val– 后减
++val 先增
–val 先减
** 幂运算
<< 左位移
& 位布尔和
&& 逻辑和

1

2

3

4

5

6

7

8

9

10

11

12

13

14

$cat test

#!/bin/bash

val1=10

if (( $val1 ** 2 > 90 )) //大于号无需转义

then

(( val2 = $val1 ** 2 ))

echo "The square of $val1 is $val2"

fi

$

$./test

The square of 10 is 100

$

11.6.2 使用双方括号

  • 双方括号命令提供了针对字符串的高级特性
  • 格式:[[ expression ]]
    • expression:使用了test命令中采用的标准字符串进行比较
    • 它提供了test命令为提供的另一个特性——模式匹配
      • 模式匹配中,可以定义一个规则表达式来匹配字符串

1

2

3

4

5

6

7

8

9

10

11

12

13

$cat test

#!/bin/bash

if [[ $USER == r* ]]

then

echo "Hello $USER"

else

echo "Sorry, I do not know you"

fi

$

$./test

Hello rich

$

11.7 case命令

  • 格式如下

    • case命令会将指定的变量同不同模式进行比较,匹配则shell会执行该模式指定的命令
    • 可以通过竖线操作符来分隔模式,在一行输出多个模式
    • 星号会补货所有跟所有列出的模式都不匹配的值

Java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

//格式:

case variable in

pattern1 | pattern2) commands1;;

pattern3) commands2;;

*) default commands;;

esac

//例程:

$ cat test

#!/bin/bash

case $USER in

rich | barbara)

echo "Welcome, $USER"

echo "Please enjoy your visit";;

testing)

echo "Special testing account";;

jessica)

echo "Do not forget to log off when you‘re done";;

*)

echo "Sorry, you are not allowed here";;

esac

$

$./test

Welcome, rich

Please enjoy your visit

$

时间: 2024-10-05 04:58:08

shell脚本编程-使用结构化命令(if/else)(转)的相关文章

Linux Shell脚本编写——使用结构化命令(二)

结构化命令中,最基本的类型就是if-then语句 if command then command fi bash shell的if语句会执行if行定义的那个命令,如果命令的退出状态码是0,则代表成功执行,位于then部分的命令就会执行.如果if行定义的命令的退出状态码是其他,则then部分的命令将不会执行,且if-then语句不能测试跟命令的退出状态码无关的条件 代码2-1 [email protected]:/data# cat demo1 #!/bin/bash if date then e

Linux Shell脚本编写——使用结构化命令(四)

命令行参数 向shell脚本传数据的最基本方法是使用命令行参数,命令行参数允许在运行脚本时向命令行添加数据值 读取参数 bash shell会将一些称为位置参数的特殊变量分配给命令行输入的所有参数,甚至包括shell执行的程序的名字,$0是程序名,$1是第一个参数,$2是第二个参数 代码4-1 [email protected]:/data# cat demo1 #!/bin/bash factorial=1 for ((i=1;i<=$1;i++)) do factorial=$[ $fact

Linux Shell脚本编写——使用结构化命令(三)

for命令 for var in listdo commandsdone 代码2-1 [email protected]:/data# cat demo1 #!/bin/bash for test in Alabama Alaska Arizona Arkansas "California Colorado" do echo "The next state is $test" done echo "The last state we visited was

Shell编程—使用结构化命令

1使用if-then语句 f-then语句有如下格式. if command then commands fi bash shell的if语句会运行if后面的那个命令.如果该命令的退出状态码是0(该命令成功运行),位于then部分的命令就会被执行.如果该命令的退出状态码是其他值, then部分的命令就不会被执行,bash shell会继续执行脚本中的下一个命令.fi语句用来表示if-then 语句到此结束. 举例: $ vim test1.sh #!/bin/bash # testing the

shell脚本编程中的grep命令

grep命令语法 grep命令使用一个选项.一个要匹配的模式和要搜索的文件,它的语法如下所示: grep  [options]  PATTERN  [FILES] 如果没有提供文件名,则grep命令将搜索标准输入. options 选项 含义 -c   输出匹配行的数目,而不是输出匹配的行 -E   启用扩展表达式 -h   取消每个输出行的普通前缀,即匹配查询模式的文件名 -i   忽略大小写 -l   只列出包含匹配行的文件名,而不输出真正的匹配行 -v   对匹配模式取反,即搜索不匹配行而

Linux Shell脚本编程--cut命令

cut cut命令可以从一个文本文件或者文本流中提取文本列. cut语法 [[email protected] ~]# cut -d'分隔字符' -f fields <==用于有特定分隔字符 [[email protected] ~]# cut -c 字符区间 <==用于排列整齐的信息 选项与参数: -d :后面接分隔字符.与 -f 一起使用: -f :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思: -c :以字符 (characters) 的单位取出固定字符区间:

(转)Shell脚本编程--Uniq命令

uniq 原文:http://blog.csdn.net/xifeijian/article/details/9209627 uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用.也就是说,为了使uniq起作用,所有的重复行必须是相邻的. uniq语法 [[email protected] ~]# uniq [-icu] 选项与参数: -i :忽略大小写字符的不同: -c :进行计数 -u :只显示唯一的行 testfile的内容如下 cat testfile hello

《Linux命令行与shell脚本编程大全》学习笔记(转)

第一部分:Linux命令行<Linux命令行与shell脚本编程大全> 第一章:初识Linux shell<Linux命令行与shell脚本编程大全> 第二章:走进shell<Linux命令行与shell脚本编程大全> 第三章:基本的bash shell命令<Linux命令行与shell脚本编程大全> 第四章:更多的bash shell命令<Linux命令行与shell脚本编程大全> 第五章:使用Linux环境变量<Linux命令行与she

linux shell脚本使用结构化命令

内容: 一.if-then命令 二.if-then-else命令 三.test命令 四.case命令 1.if-then结构化命令中最基本的类型,其格式如下: 1 if command 2 then 3 commands 4 fi 这里需要注意的是在其他语言中if 语句之后的对象是一个等式来测试是TRUE还是FALSE值,而在bash shell中if 语句会运行if 行定义那个命令.如果该命令退出码是数字0,则表示该命令运行成功,位于then 后面的命令就会运行.如果退出码是其他值,那么the