shell 之 test 命令
1. test 命令test 命令提供了在 if-then 语句中测试不同条件的途径。如果 test 命令中列出的条件成立,test 命令就会退出并返回退出状态码0;如果条件不成立,test 命令就会退出并返回退出状态码1,这样 if-then 语句就会失效。 test 命令的格式非常简单: 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类条件: 数值比较test 命令的数值比较功能
注意:test 命令中不能使用浮点数。 字符串比较test 命令的字符串比较功能
字符串比较的三大注意事项: #!/usr/bin/env bash
val1=$1
val2=$2
if [ "$val" &; "$val2" ];then
echo $val1
else
echo $val2
fi
# 变量不加双引号回报错:
# test.sh: line 6: [: >: unary operator expected
在 test 命令中大写字母会被当成小于小写字母的。但将同样的字符串放进文件中并用 sort 命令排序时,小写字母会先出现。这是由各个命令使用的排序技术不同造成的。test 命令会使用标准的 ASCII 顺序,根据每个字符的 ASCII 数值来决定排序顺序。sort 命令使用的是系统的本地化语言设置中定义的排序顺序。 # sh test.sh Test test
test
--------- file.txt: Test test ---------
# sort file.txt
test
Test
文件比较test命令的文件比较功能
2. 复合条件测试if-then 语句允许使用布尔逻辑来组合测试: 3. if-then 的高级特性if-then 语句中使用的高级特性: 使用双尖括号使用双尖括号格式: ((expression))
双尖括号命令符号
#!/usr/bin/env bash
val1=$1
val2=$2
if (($val1 ** 2 > 100));then
((val2 = $val1 ** 2))
echo $val2
else
echo $val2
fi
使用双方括号双方括号命令提供了针对字符串比较的高级特性: [[ expression ]]
双尖括号里的 expression 使用了 test 命令中采用的标准字符串进行比较。但它提供了 test 命令未提供的另一个特性——模式匹配(Pattern Matching)。 定义正则表达式匹配: #!/usr/bin/env bash
val=$1
# 匹配所有以 r 开头的字符串
if [[ $val = r* ]];then
echo $val
else
echo "Don't match"
fi
4. case 命令为单个变量寻找特定的值,可以用 case 命令,而不是写那么多的 elif 语句检查。case 命令会检查单个变量列表格式的多个值: case variable in
pattern1 | pattern2)
commands1
;;
pattern3)
commands2
;;
*)
default commands
;;
esac
case 命令会将指定的变量同不同模式进行比较。如果变量和模式是匹配的,那么 shell 会执行为该模式指定的命令。也可以通过竖线操作符来分割模式,在一行列出多个模式。星号会捕获所有跟所有列出的模式都不匹配的值。 #!/usr/bin/env bash
read -p 'Enter what you want: ' USER
case $USER in
rich | barbara)
echo "Welcome $USER"
echo 'Enjoy your visit'
;;
testing)
echo "Special testing acount"
;;
jessica)
echo "Don't forget to log off"
;;
*)
echo "Sorry,you aren't allowed here"
;;
esac (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |