欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

《Linux命令行与shell脚本编程大全》 第十一章

程序员文章站 2022-05-16 08:48:11
...

 

第一部分:Linux命令行
《Linux命令行与shell脚本编程大全》 第一章:初识Linux shell
《Linux命令行与shell脚本编程大全》 第二章:走进shell
《Linux命令行与shell脚本编程大全》 第三章:基本的bash shell命令
《Linux命令行与shell脚本编程大全》 第四章:更多的bash shell命令
《Linux命令行与shell脚本编程大全》 第五章:使用Linux环境变量
《Linux命令行与shell脚本编程大全》 第六章:理解Linux文件权限
《Linux命令行与shell脚本编程大全》 第七章:管理文件系统
《Linux命令行与shell脚本编程大全》 第八章:安装软件程序
《Linux命令行与shell脚本编程大全》 第九章:使用编辑器

第二部分:shell脚本编程基础
《Linux命令行与shell脚本编程大全》 第十章:构建基本脚本
《Linux命令行与shell脚本编程大全》 第十一章:使用结构化命令
《Linux命令行与shell脚本编程大全》 第十二章:更多的结构化命令
《Linux命令行与shell脚本编程大全》 第十三章:处理用户输入
《Linux命令行与shell脚本编程大全》 第十四章:呈现数据
《Linux命令行与shell脚本编程大全》 第十五章:控制脚本

第三部分:高级shell编程
《Linux命令行与shell脚本编程大全》 第十六章:创建函数
《Linux命令行与shell脚本编程大全》 第十七章:图形化桌面上的脚本编程
《Linux命令行与shell脚本编程大全》 第十八章:初识sed和gawk
《Linux命令行与shell脚本编程大全》 第十九章:正则表达式
《Linux命令行与shell脚本编程大全》 第二十章:sed进阶
《Linux命令行与shell脚本编程大全》 第二十一章:gawk进阶
《Linux命令行与shell脚本编程大全》 第二十二章:使用其他shell

第四部分:高级shell脚本编程主题
《Linux命令行与shell脚本编程大全》 第二十三章:使用数据库
《Linux命令行与shell脚本编程大全》 第二十四章:使用Web
《Linux命令行与shell脚本编程大全》 第二十五章:使用E-mail
《Linux命令行与shell脚本编程大全》 第二十六章:编写脚本实用工具
《Linux命令行与shell脚本编程大全》 第二十七章:shell脚本编程进阶

 

第十一章:使用结构化命令

使用if-then语句

if command
then
    commands
fi

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

另外一种形式

if command; then
    commands
fi

 

if-then-else语句

if command
then
    commands
else
    commands
fi

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

 

嵌套if(else if)

if command1
then
    commands
elif command2
then
    commands
fi

 

test命令

test命令可以判断3类条件

1.数值比较

2.字符串比较

3.文件比较

格式:

test condition

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

if test condition
then
    commands
fi

或者

if [ command ]
then
    commands
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旧

以检查目录为例:

if [ -d $HOME ]
then
    cd $HOME
else
    echo "$HOME is not a directory"
fi

 

复合条件测试

[ condition1 ] || [ condition2 ]

[ condition1 ] && [ condition2 ]

 

if-then的高级特性

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

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

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

格式:

(( expression ))

命令符号

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

 

双方括号格式

[[ expression ]]

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

if [ $USER == r* ]

 

case命令

命令格式:

case variable in
pattern1 | pattern2) commands1;;
pattern3) commands2;;
*) default commands;;
esac

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

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

下面是一个简单的示例:

case $test in
pork | beef | lamb )
    echo "$test is meat!"
    echo "I like it!";;
potato | tomato | eggplant )
    echo "$test is a vegetable"
    echo "who likes it?";;
*)
    echo "what's this?";;
esac

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

 

 

转贴请保留以下链接

本人blog地址

http://su1216.iteye.com/

http://blog.csdn.net/su1216/