当前位置: 首页 > Linux

Linux-Shell语法(五)-常用命令

时间:2023-04-07 01:15:29 Linux

工具与资源中心帮助开发者更高效地工作,提供围绕开发者全生命周期的工具与资源https://developer.aliyun.com/...本文共介绍以下内容:expr,read,echo,printf,test命令和判断符号[]expr命令expr命令用于求表达式的值,格式为:expr表达式表达式方法:每一项用空格隔开在特定于shell的字符(即转义符)前使用反斜杠将包含空格和其他特殊字符的字符串括在引号中。expr将在标准输出中输出结果。如果是逻辑表达式,结果为真stdout为1,否则为0expr也有退出码,如果是逻辑关系表达式,结果为真则退出码为0,否则为1字符串表达式长度STRING:返回STRING索引的长度STRINGCHARSET:返回CHARSET中任意单个字符在STRING中的第一个字符位置,下标从1开始。如果STRING中CHARSET中没有字符则返回0。substrSTRINGPOSITIONLENGTH:返回STRING字符串中从POSITION开始,最大长度为LENGTH的字符串。如果POSITION或LENGTH为负数、0或非数字,则返回空字符串。例子:str="HelloWorld!"echo`exprlength"$str"`#注意``不是单引号,意思是获取``中命令的stdout,输出12echo`exprindex"$str"aWd`#输出7,下标从1开始echo`exprsubstr"$str"23`#输出ell整型表达式expr支持普通算术运算,算术表达式优先级低于字符串表达式,高于逻辑关系表达式。+-:加法和减法。两端的参数都会被转换成整数,如果转换失败会报错。*/%:乘除取模运算。两端的参数都会被转换成整数,如果转换失败会报错。():可以表示优先级,但需要反斜杠转义例子:a=3b=4echo`expr$a+$b`#output7echo`expr$a-$b`#output-1echo`expr$a\*$b`#输出12,*需要转义echo`expr$a/$b`#输出0,可整除echo`expr$a%$b`#输出3echo`expr\($a+1\)\*\($b+1\)`#输出20,值为(a+1)*(b+1)逻辑关系表达式|:如果第一个参数不为空不为0,则返回第一个参数值的值,否则返回第二个参数的值,但要求第二个参数的值也为非空或非零,否则返回0。如果第一个参数为非空或非零,则第二个参数不会进行评估。&:如果两个参数都非空且非零,则返回第一个参数,否则返回0。如果第一个参数为0或空,则不会计算第二个参数。<<====!=>=>:比较两端的参数,为真返回1,否则返回0。“==”是“=”的同义词。“expr”首先尝试将两端的参数转换为整数,并进行算术比较,如果转换失败,则根据字符集排序规则进行字符比较。():可以使用表的优先级,但需要用反斜杠转义例子:a=3b=4echo`expr$a\>$b`#output0,>需要转义echo`expr$a'<'$b`#输出1,特殊字符也可以用引号括起来echo`expr$a'>='$b`#输出0echo`expr$a\<\=$b`#输出1c=0d=5echo`expr$c\&$d`#输出0echo`expr$a\&$b`#输出3echo`expr$c\|$d`#输出5echo`expr$a\|$b`#output3readcommandreadcommand用于从标准输入(stdin)读取当前行的数据。当读取到文件末尾(ctrl+d)时,退出码为1,否则为0。可选参数:-p:后跟要输出的提示信息-t:后跟一个以秒为单位的数字,定义接受输入的等待时间,超时自动忽略。该命令示例:readname#读取name的值ubuntu#stdinecho$name#输出name的值read-p"Pleaseinputyourname:"-t30name#读入name的值,等待30秒echo命令echo命令用于输出字符串,格式为echoSTRING显示普通字符串echo"helloubuntu"echohelloubuntu#引号可以省略显示转义字符-e参数表示转义,有些转义字符必须加上这个参数才能起作用.比如:\\a\b\c\d\e\f\n\r\t\v,其他转义字符可能不需要-e也可以转义echo"\"helloubuntu\""#使用双引号吧会转义echo\"helloubuntu\"#不带双引号也可以转义#如果没有转义可以加参数-eecho-e"Hi\n"#-e开启转义echo"ubuntu":<<!第五六行输出如下:Hiubuntu!displayvariablename=ubuntuecho"hi,$name"#输出hi,ubuntu显示不换行echo-e"hi\c"#\c表示不换行echo"ubuntu"的输出结果为:hiubuntu显示结果和将它们重定向到文件echo"helloubuntu">output.txt#将显示的结果以覆盖的方式输出到output.txt中,将字符串原样输出,不转义或取变量名=ubuntuecho'$name\"'输出结果为:$name\"显示命令的执行结果(stdout)echodate输出结果为:Sunday,September5,202119:05:20CSTprintf命令printf命令用于格式化输出类似C/C++中的printf函数,默认情况下不会在字符串末尾添加换行符。格式:printfformat-string[arguments...]示例:脚本内容:printf"%10d.\n"123#10位,右对齐printf"%-10.2f.\n"123.123321#10位,保留2小数位,左对齐printf"Mynameis%s\n""ubuntu"#格式化输出字符串printf"%d*%d=%d\n"23`expr2\*3`#表达式的值作为参数输出结果:123.123.12。我的名字是yxc2*3=6逻辑运算符&&和||&&的意思是和,||表示或和类似于expr命令中的逻辑运算,这两个逻辑运算符也具有短路原理:expr1&&expr2:当expr1为假时,跳过expr2的运算expr1||对于test命令,在命令行输入mantest可以查看test命令的使用情况。测试命令返回带有退出代码而不是标准输出的结果。0表示真,非零表示假。测试命令和逻辑运算匹配作为简单的条件判断,例如:test-etest.sh&&echo"exist"||echo"notexist"#用来判断文件test.sh是否存在,存在则输出exist,否则输出不存在文件类型判断test-efilename#判断文件是否存在test-ffilename#判断是否存在普通文件test-dfilename#判断是否为目录文件权限判断test-rfilename#判断文件是否可读test-wfilename#判断文件是否可写test-xfilename#判断文件是否可读executabletest-sfilename#判断文件是否非空整数比较test$a-eq$b#a是否等于btest$a-ne$b#a是否不等于btest$a-gt$b#a是否大于btest$a-lt$b#a是否小于btest$a-ge$b#a是否大于等于btest$a-le$b#a是否小于等于tob字符串比较测试-zSTRING#判断STRING是否为空,如果是则返回true是否等于str2teststr1!=str2#判断str1是否不等于str2多条件判断测试-rfilename-a-xfilename-a:两个条件是否同时成立-o:两个条件是否至少有一个成立!:取反。例如,test!-x文件在文件不可执行时返回true。判断符号[][]的用法和test几乎一样。多种功能,这里暂不介绍。[2-lt3]#当返回值为0时也返回true。注意[后面要有空格,]之前要有空格,否则会报错。和test类似,[]也可以和逻辑运算一起使用,进行简单的条件判断[-etest.sh]&&echo"exist"||echo"notexist"需要注意的是,[]中的每一项都要用空格隔开。[]中的常量和变量最好用双引号括起来,否则可能会因为常量和变量中有空格而报错。本文转自:https://developer.aliyun.com/...