共计 3620 个字符,预计需要花费 10 分钟才能阅读完成。
工具与资源核心
帮忙开发者更加高效的工作,提供围绕开发者全生命周期的工具与资源
https://developer.aliyun.com/…
本文共介绍以下内容:expr,read,echo,printf,test 命令与判断符号[]
expr 命令
expr 命令用于求表达式的值,格局为:expr 表达式
表达式应用办法:
- 用空格隔开每一项
- 用反斜杠放在 shell 特定的字符后面(即本义)
- 对蕴含空格和其余特殊字符的字符串要用引号括起来
- expr 会在 stdout 中输入后果,如果为逻辑关系表达式,后果为真 stdout 为 1,否则为 0
-
expr 也有 exit code,如果为逻辑关系表达式,后果为真则 exit code 为 0,否则为 1
字符串表达式
- length STRING:返回 STRING 的长度
- index STRING CHARSET:返回 CHARSET 中任意单个字符在 STRING 中最后面的字符地位,下标从 1 开始。如果 STRING 中没有 CHARSET 中任一字符,则返回 0。
-
substr STRING POSITION LENGTH:返回 STRING 字符串中从 POSITION 开始,长度最大为 LENGTH 的字串。如果 POSITION 或 LENGTH 为正数、0 或非数值,则返回空字符串。
示例:str="Hello World!" echo `expr length "$str"` # 留神 `` 不是单引号,示意获取 `` 中 command 的 stdout,输入 12 echo `expr index "$str" aWd` #输入 7,下标从 1 开始 echo `expr substr "$str" 2 3` #输入 ell
整数表达式
expr 反对一般的算术操作,算术表达式优先级低于字符串表达式,高于逻辑关系表达式。
- +-:加减运算。两端参数会转换为整数,如果转换失败则会报错。
- */ %:乘除取模运算。两端参数会转换为整数,如果转换失败则会报错。
-
():能够示意优先级,但须要反斜杠本义
示例:a=3 b=4 echo `expr $a + $b` # 输入 7 echo `expr $a - $b` # 输入 -1 echo `expr $a \* $b` # 输入 12,* 须要本义 echo `expr $a / $b` # 输入 0,整除 echo `expr $a % $b` # 输入 3 echo `expr \($a + 1 \) \* \($b + 1 \)` # 输入 20,值为(a + 1) * (b + 1)
逻辑关系表达式
- |:如果第一个参数非空且非 0,则返回第一个参数的值,否则返回第二个参数的值,但要求第二个参数的值也是非空或非 0,否则返回 0。如果第一个参数是非空或非 0 时,不会计算第二个参数。
- &:如果两个参数都非空且非 0,则返回第一个参数,否则返回 0。如果第一个参为 0 或为空,则不会计算第二个参数。
- < <= = == != >= >:比拟两端的参数,如果为 true,则返回 1,否则返回 0。”==”是”=”的同义词。”expr”首先尝试将两端参数转换为整数,并做算术比拟,如果转换失败,则按字符集排序规定做字符比拟。
-
():能够该表优先级,但须要用反斜杠本义
示例:a=3 b=4 echo `expr $a \> $b` # 输入 0,> 须要本义 echo `expr $a '<' $b` # 输入 1,也能够将特殊字符用引号引起来 echo `expr $a '>=' $b` # 输入 0 echo `expr $a \<\= $b` # 输入 1 c=0 d=5 echo `expr $c \& $d` # 输入 0 echo `expr $a \& $b` # 输入 3 echo `expr $c \| $d` # 输入 5 echo `expr $a \| $b` # 输入 3
read 命令
read 命令用于从规范输出 (stdin) 中读取当行数据。当读到文件结束符 (ctrl+d) 时,exit code 为 1,否则为 0。
可选参数:
- -p:前面能够接要输入的提示信息
-
-t:前面接以秒为单位的数字,定义承受输出的等待时间,超时会主动疏忽此命令
示例:read name # 读入 name 的值 ubuntu # stdin echo $name # 输入 name 的值 read -p "Please input your name:" -t 30 name # 读入 name 的值,等待时间 30 秒
echo 命令
echo 命令用于输入字符串,格局为 echo STRING
显示一般字符串
echo “hello ubuntu”
echo hello ubuntu # 引号能够省略
显示转义字符
- e 参数示意进行本义,局部转义字符必须加此参数才起作用。例如:\ \a \b \c \d \e \f \n \r \t \v,其余转义字符可能不须要 - e 也能够本义
echo "\"hello ubuntu\"" # 应用双引号会本义
echo \"hello ubuntu\" # 也能够不应用双引号,也会本义
# 若没有本义能够加参数 -e
echo -e "Hi\n" # -e 开启本义
echo "ubuntu"
:<<!
第五行和第六行输入的内容如下:
Hi
ubuntu
!
显示变量
name=ubuntu
echo “hi,$name” # 输入 hi,ubuntu
显示不换行
echo -e “hi \c” # \c 示意不换行
echo “ubuntu”
输入后果为:hi ubuntu
显示后果重定向到文件
echo “hello ubuntu” > output.txt # 将显示后果以笼罩形式输入到 output.txt 中
原样输入字符串,不进行本义或取变量
name=ubuntu
echo ‘$name\”‘
输入后果为:$name\”
显示命令的执行后果(stdout)
echo date
输入后果为:2021 年 9 月 5 日 星期日 19 时 05 分 20 秒 CST
printf 命令
printf 命令用于格式化输入,相似 C /C++ 中的 printf 函数,默认不在字符串开端增加换行符。
格局:printf format-string [arguments…]
示例:
脚本内容:
printf "%10d.\n" 123 # 占 10 位,右对齐
printf "%-10.2f.\n" 123.123321 # 占 10 位,保留 2 位小数,左对齐
printf "My name is %s\n" "ubuntu" # 格式化输入字符串
printf "%d * %d = %d\n" 2 3 `expr 2 \* 3` # 表达式的值作为参数
输入后果:
123.
123.12 .
My name is yxc
2 * 3 = 6
逻辑运算符 && 和 ||
- && 示意与,|| 示意或
- 和 expr 命令中的逻辑运算类似,这两个逻辑运算符也具备短路准则:
expr1 && expr2:当 expr1 为假时,跳过 expr2 的运算
expr1 || expr2:当 expr1 为真时,跳过 expr2 的运算
-
表达式的 exit code 为 0 时示意真,非零示意假
test 命令
在命令行中输出 man test,能够查看 test 命令的用法。
test 命令用 exit code 而不是 stdout 返回后果。0 示意真,非零示意假。
test 命令和逻辑运算合乎用做一个简略条件判断,例如:
test -e test.sh && echo "exist" || echo "not exist"
#用于判断文件 test.sh 是否存在,存在则输入 exist,否则输入 not exist
文件类型判断
test -e filename # 判断文件是否存在
test -f filename # 判断是否为一般文件
test -d filename # 判断是否为目录
文件权限判断
test -r filename # 判断文件是否可读
test -w filename # 判断文件时否可写
test -x filename # 判断文件是否可执行
test -s filename # 判断文件是否非空
整数间的比拟
test $a -eq $b # a 是否等于 b
test $a -ne $b # a 是否不等于 b
test $a -gt $b # a 是否大于 b
test $a -lt $b # a 是否小于 b
test $a -ge $b # a 是否大于等于 b
test $a -le $b # a 是否小于等于 b
字符串比拟
test -z STRING # 判断 STRING 是否为空,是则返回 true
test -n STRING # 判断 STRING 是否为非空,是则返回 true,(-n 能够省略)
test str1 == str2 # 判断 str1 是否等于 str2
test str1 != str2 # 判断 str1 是否不等于 str2
多重条件断定
test -r filename -a -x filename
-a:两条件是否同时成立
-o:两条件是否至多一个成立
!:取反。如 test !-x file 当 file 不可执行时,返回 true
判断符号[]
[]与 test 的用法简直截然不同,罕用于 if 语句中,另外还有[[]],能够认为是一个加强版,反对更多个性,这里临时不介绍。
[2 -lt 3] # 同样返回值为 0 时代表真。留神 [之后有空格,]之前也有空格,否则会报错
与 test 相似,[]也能够与逻辑运算合用做简略的条件判断
[-e test.sh] && echo “exist” || echo “not exist”
须要留神的有:
- []内的每一项都要用空格隔开
- []内的常量、变量最好都用双引号括起来,否则可能因常量、变量里有空格导致报错
本文转自:https://developer.aliyun.com/…