linux SHELL之结构化命令

SHELL之使用结构化命令

使用if-then语句

Bash代码   收藏代码
  1. if command  
  2. then  
  3.     commands  
  4. fi  

如果if后面的命令退出状态码=0,那么就执行then

另外一种形式

Bash代码   收藏代码
  1. if command; then  
  2.     commands  
  3. fi  

 

if-then-else语句

Bash代码   收藏代码
  1. if command  
  2. then  
  3.     commands  
  4. else  
  5.     commands  
  6. fi  

如果if后面的命令退出状态码=0,那么就执行then,否则,执行else

 

嵌套if(else if)

Bash代码   收藏代码
  1. if command1  
  2. then  
  3.     commands  
  4. elif command2  
  5. then  
  6.     commands  
  7. fi  

 

test命令

test命令可以判断3类条件

1.数值比较

2.字符串比较

3.文件比较

格式:

test condition

在if语句中,可以使用方括号[]

Bash代码   收藏代码
  1. if test condition  
  2. then  
  3.     commands  
  4. fi  

或者

Bash代码   收藏代码
  1. if [ command ]  
  2. then  
  3.     commands  
  4. fi  

注意:方括号两边必须加入一个空格,不然会报错

 

数值比较

比较描述
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

可以用在变量上

注意:不能使用浮点数

 

字符串比较

比较描述
str1 = str2检查str1是否和str2相同
str1 != str2检查str1是否和str2不同
str1 < str2检查str1是否比str2小
str1 > str2检查str1是否比str2大
-n str1检查str1的长度是否非0
-z str1检查str1的长度是否为0

 

顺序比较需要注意:

1.大于小于符号要转义,不然会被识别为重定向符号                                                                                              

2.test命令根据ASCII顺序排序,与sort命令不同

 

 字符串长度

当变量为空字符串或者没有初始化时,变成长度是0

空字符串或没有初始化的变量可能会对程序有灾难性影响,使用前最好先使用test命令中的-n和-z确认

 

文件比较

比较描述
-d file检查file是否存在并且是否是一个目录
-e file检查file是否存在
-f file检查file是否存在并且是否是一个文件
-r file检查file是否存在并可读
-s检查file是否存在并非空
-w检查file是否存在并可写
-x检查file是否存在并可执行
-O检查file是否存在并属于当前用户所有
-G检查file是否存在并且默认组与当前用户相同

file1 -nt file2

检查file1是否比file2新
file1 -ot file2检查file1是否比file2旧

以检查目录为例:

Bash代码   收藏代码
  1. if [ -d $HOME ]  
  2. then  
  3.     cd $HOME  
  4. else  
  5.     echo "$HOME is not a directory"  
  6. fi  

 

复合条件测试

[ condition1 ] || [ condition2 ]

[ condition1 ] && [ condition2 ]

 

if-then的高级特性

1.用于数学表达式的双圆括号

2.用于高级字符串处理的双方括号

双圆括号允许将高级数学表达式放入比较中

格式:

(( expression ))

命令符号

符号描述
val++后增
val--后减
++val先增
--val先减
!逻辑求反
~位求反
**幂运算
<<左位移
>>右位移
&位布尔和
|位布尔或
&&逻辑和
||逻辑或

 

双方括号格式

[[ expression ]]

提供了模式匹配(pattern matching)特性,可以在其中使用正则表达式

Bash代码   收藏代码
  1. if [ $USER == r* ]  

 

case命令

命令格式:

Bash代码   收藏代码
  1. case variable in  
  2. pattern1 | pattern2) commands1;;  
  3. pattern3) commands2;;  
  4. *) default commands;;  
  5. esac  

bash中是可以在case中检查字符串的

从java到bash,语法转变还是很大的,不过思想是不会变的

下面是一个简单的示例:

Bash代码   收藏代码
  1. case $test in  
  2. pork | beef | lamb )  
  3.     echo "$test is meat!"  
  4.     echo "I like it!";;  
  5. potato | tomato | eggplant )  
  6.     echo "$test is a vegetable"  
  7.     echo "who likes it?";;  
  8. *)  
  9.     echo "what's this?";;  
  10. esac  

在java7之前,这么写是不可以的,switch case中不支持string类型


【from:http://su1216.iteye.com/blog/1771836】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值