乐趣区

关于linux:LinuxShell语法5常用命令

工具与资源核心
帮忙开发者更加高效的工作,提供围绕开发者全生命周期的工具与资源
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/…

退出移动版