标签:用户名 字符 状态码 mic 函数 方法 相等 name 数字
if command then commands fi
bash shell中的if语句运行在if行定义的命令. 如果命令突出状态时0, 将执行then后面的命令. 如果命令的退出状态时0以外的其他值,那么then后面的命令将不会执行.#!/bin/bash
# testing the if statement if date echo "it worked" fi
echo "we‘re outside of the if statement"
# 输出: it worked ; we‘re outside of the if statement
if语句行使用 grep 命令搜索/etc/passwd文件,查看系统是否正在使用一个特定的用户名.如果一个用户拥有该登录名,脚本会显示一些文本,然后列出用户HOME目录下的bash文件. 如果变量testuser设置成系统中不存在的一个用户,什么都不会列出
#!/bin/bash # testing multiple commands in the then section testuser=root if grep $testuser /etc/passwd then echo The bash file for user $testuser are: ls -a /home/testuser/.b* fi
if command then commands
else
commands fi
如果 if 语句行的命令返回的状态码为0, 就会执行在 then 部分列出的命令, 就像在普通的 if-then 语句中一样.如果if语句行的命令返回非零退出状态码,bash shell 将会执行 else 部分的命令
#!/bin/bash # testing the else section
testuser=badtest
if grep $testuser /etc/passwd
then
echo The files for user $testuser are:
ls -a /home/$testuser/.b*
else
echo "The user name $testuser doesn‘t exxist on this system"
fi
输出: The user name badtest doesn‘t exist on this system
if command1
then
commed2
elif commed2
then
more commands
elif commed3
then
more commands
fi
elif语句行提供另一条要评估的命令,与原始的if语句行相似. 如果elif命令返回的退出状态码为 0, bash 执行第二个then语句部分的命令
命令块的执行依赖于哪条命令返回的退出状态码为0. bash shell 会按顺序执行 if 语句, 只有第一个返回0退出状态的命令会导致then部分命令被执行.
提供一种检测 if-then 语句中不同条件的方法. 如果 test 命令中列出的条件评估值为 true, test 命令以0 退出状态码退出, 这使 if-then语句使用与其他编程语言中的 if-then 语句一样的方法运行. 如果条件为 false, 则 test 命令退出, 使得 if-then语句失败
test condition # condition是一系列test命令评估的参数和值. 在if-then语句中使用时, test命令如下所示 if test condition then commands fi # bash shell 提供一种在 if-then 语句中声明 test 命令的另一种方法: if [ condition ] then commands fi # 方括号定义在test命令中使用的条件.
# 注意, 在前半个方括号的后面和后半个方括号的前面必须都有一个空格,否则会得到错误信息 # test命令能评估一下3类条件: 1.数值比较, 2.字符串比较, 3.文件比较
1) 数值比较
#!/bin/bash # using numeric test comparisons var1=10 var2=11 if [ $var -gt 5 ] then echo "The test value $val1 is greater than 5" fi if [ $val1 -eq $val2 ] then echo "The values are equal" else echo "The values are different" fi # 第一个测试条件: if [ $val1 -ft 5 ] 测试变量 val1 的值是否大于5 # 第二个 test 条件: if [ $val1 -eq $val2 ] 测试变量val1的值是否等于变量val2的值 # 输出: The test value 10 is greater than 5 ; The values are different
# -----------------------------------------------------------------------
#!/bin/bash
# testing floating point numbers
val1=` echo "scale=4; 10 / 3 " | bc`
echo "The test value is $val1"
if [ $val1 -gt 3 ]
then
echo "The result is larger than 3"
fi
# 输出: The test value is 3.333 ; [: 3.333: integer expression expected
当使用 bash 计算器来生成一个浮点值, 并将它存储在变量 val1 中, bash shell 将无法处理成功.
bash shell 只能处理整数数字, 在面向数值函数(如数值测试条件)中不起作用.
2) 字符串比较
# 1.字符串相等 ( 比较字符串是否相等时, 测试比较将所有标点符号和大写都考虑在内 ) #!/bin/bash # testing string equality testuser=rich if [ $USER = $testuser ] then echo "Welome $testuser" else echo "This isn‘t $testuser" fi # rich 登录 输出: Welcome rich # baduser登录 输出: This isn‘t baduser # ---------------------------------- # 2.字符串顺序 # 问题: 1.大于和小于符号一定要转义, 否则shell会将他们当作重定向符号,将字符串值看作文件名; 2.大于和小于顺序与在 sort 命令中的顺序不同 #!/bin/bash # mis-using string comparisons val1=baseball val2=hockey if [ $val1 > $val2 ] then echo "$val1 is greater than $val2" else echo "$val1 is less than $val2" fi # baseball is greater than hockey # 同时当前目录下生成了一个名为 hockey 的文件 # 脚本将大于号理解为输出重定向,所以创建了一个 hockey 文件. 由于重定向成功完成,所以测试命令返回突出状态代码 0 , if 语句认为事情已成功完成. 要解决这个问题,需要适当转义大于号 # 当字符串中存在大小写字母时, test命令使用标准的 ASCII 排序 #------------------------------------------------------- # 3.字符串大小 #!/bin/bash # testing string length val1=testing val2=‘‘ if [ -n $val1 ] then echo "The string ‘$vall‘ is not empty" else echo "The string ‘$val1‘ is empty" fi if [ -z $val2 ] then echo "The string ‘$val2‘ is empty" else echo "The string ‘val2‘ is not empty" fi if [ -z $val3 ] then echo "The string ‘$val3‘ is empty" else echo "The string ‘$val3‘ is not empty" fi # 输出: The string ‘testing‘ is not empty ; The string ‘‘ is empty ; The string ‘‘ is empty # if [ -n $val1 ] 确定变量val1的长度是否为非零值,如果是非零值,那么将处理then部分 # if [ -z $val2 ] 确定变量val2的长度是否为0,,如果是0, 那么将处理then部分; # if [ -z $val3 ] 确定变量val3的长度是否为0,未定义,所以长度为零
警告: 空变量和没有初始化的变量可能会对shell脚本测试产生灾难性的影响.如果不确定变量的内容, 在数值比较或者字符串比较中使用它之前, 最好使用 -n 后者 -z 测试一下它是否有值
3) 文件比较
test命令能够测试Linux文件系统上的文件状态和路径
标签:用户名 字符 状态码 mic 函数 方法 相等 name 数字
原文地址:https://www.cnblogs.com/lab-zj/p/12937932.html