变量表达式
test是shell程序中的一个表达式,通常用在流程控制for、while、if等结构中,用test命令去判断文件的存在与性质,变量的相互关系
语法:test<表达式>
如果<表达式>成立,test返回0,反之返回一个非0值
字符串比较
两个数值的比较
逻辑操作,可以进行and/or,与其他条件联合使用
文件操作,例如文件是否存在文件的状态等
字符串比较
test –z<字符串>比较字符串的长度是否为0,如果等于0则返回0,不是则返回1
$?:存储shell中上一个程序执行的返回值
test –n比较字符串的长度是否大于0,如果大于0
<字符串1>=<字符串2>:比较两个字符串是否相同,相同的话输出0,等号两边要有空格判断是用==
<字符串1>!=<字符串2>:比较两个字符串是否相同,同则为是1
数字比较
<数值表达式1><算符><数值表达式2>()算符两边都要有空格
-eq:两者相等
-ne:两者不等
-lt:前者小于后者
-le:前者小于或等于后者
-gt:前者大于后者
-ge:前者大于或等于后者
文件操作
文件测试表达式通常是为了测试文件的文件操作逻辑
-e:对象是否存在,存在返回值为0
test -d:对象存在且为目录,则返回值为0
test –f:对象存在且为文件,则返回值为0
-L:对象存在且为符号连接,则返回值为0
-r:对象存在且可读,则返回值为0
-s:对象存在且长度非0,返回值为0
-w:对象存在且可度,则返回0
-x:对象存在且可执行,则返回0
!:测试条件的否定。(与上述的符号用空格给隔开)
逻辑测试
常用于逻辑测试的<表达式>有
!<表达式>:<表达式>不成立
<表达式1>-a<表达式2>:<表达式1>与<表达式2>同时成立
<表达式1> -o <表达式2>:<表达式1>或<表达式2>成立
shell流程控制语句
条件控制:if、case等结构
循环控制:for、while、until等结构
在shell中,条件判断语句可以使用if条件语句和case条件语句,case语句的选项比较多
(简单的来说if语句与case语句的区别就是,if语句是在2个条件之间选择,不是这个就是那个;case语句可以在多个条件中进行选择,就是可以列出大于2种的可能性,然后进行判断选择。)
1、 if条件语句
用法:
if<判别令>;通常是test表达式
then{命令清单1}
then{命令清单2} //else语句可以省略
fi
此处判别令通常是上述test<表达式>,如果只写表达,则用中括号括起来(中括号两边要有空格)
如果<判别令>返回0(对于test命令来说,就是其后的表达式成立),则将执行then后命令清单,反之执行else后的命令
Shell语句中的分号
分号是多个语句之间的分隔符,当只有一个语句的时候,末尾无需分号,最后一个语句后面也无需分号
Eg
If [asdfasdfdaf];then= If [asdfasdfdaf] then
if……
then……
else if….
then……
else if……
then……
else……
…….
fi
fi
fi
1、【】、=、-o 两边有空格,=也可以用==(=作为赋值符号时不能写成==)
2、$ANSWER,N两边写不写引号无所谓 3、
Eg:使用if-then-else语句创建一个根据输入分数判断分数是否合格的shell程序文件名为ak
if条件语句用于在两个选项中选定一个选项,而case条件选择为用户提供了根据字符串或变量的值从多个选项中选择一项的方法。
语法
case<变量>in
<字符串1>){ <命令清单1>}; ;
…
<字符串n>) {命令清单n}; ;
){其他命令}; ;
esac
在case运算式中也可以使用shell的通配符(“”、“?”、“[]”)
通常用“*”作为case命令的最后运算式以便在前面找不到任何相应的匹配项是执行“其他命令”的命令
eg:假如给出月份数字作为参数,就能编写一个回送月份名的脚本month。当给出数字不在1和12之间时将得到出错信息
**注:**模式字符中,可以用方括号表示一个连续的范围,如“[0-9]”;还可以用竖杠符号“|”表示或。
eg:编写shell脚本cjpd,根据输入的学生成绩判断等级。当成绩>=90时为A级;80<=成绩<90时为B级,70<=成绩<80时为C级,60<=成绩<70时为D级,成绩<60时为E级
case语句
If语句
If和case嵌套语句
注****同一个括号内用-a或-o,两个括号间用&& 或||
&&、||操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[]结构中的话,会报错
1、 for语句循环
for <循环变量>[in <循环变量取值集>]
do <命令清单>
done
如果for语句的后半部分被省略,则默认的<循环变量取值集>就是命令行参数集
如果命令清单有多条命令,系统会依次执行
两者方式不影响结果的输出
expr(求表达式变量的值)