[toc]

if

一、条件测试的表达式:

[ expression ] 括号两端必须要有空格

[[ expression ]] 括号两端必须要有空格

test expression

组合测试条件:

  • -a: and
  • -o: or
  • !: 非

二、整数比较:

  • -eq 测试两个整数是否相等
  • -ne 测试两个整数是否不等
  • -gt 测试一个数是否大于另一个数
  • -lt 测试一个数是否小于另一个数
  • -ge 大于或等于
  • -le 小于或等于

命令间的逻辑关系

  • 逻辑与:&&
    • 第一个条件为假 第二个条件不用在判断,最总结果已经有
    • 第一个条件为真,第二个条件必须得判断
  • 逻辑或:||

三、字符串比较

  • 字符串比较:
  • == 等于 两边要有空格
  • != 不等
  • > 大于
  • < 小于

四、文件测试

  • -z string 测试指定字符是否为空,空着真,非空为假
  • -n string 测试指定字符串是否为不空,空为假 非空为真
  • -e FILE 测试文件是否存在
  • -f file 测试文件是否为普通文件
  • -d file 测试指定路径是否为目录
  • -r file 测试文件对当前用户是否可读
  • -w file 测试文件对当前用户是否可写
  • -x file 测试文件对当前用户是都可执行
  • -z 是否为空 为空则为真
  • -a 是否不空

五、if 语法

if 判断条件 0为真 其他都为假

单分支if语句

if 判断条件;then
statement1
statement2
.......
fi

双分支的if语句:

if 判断条件;then
statement1
statement2
.....
else
statement3
statement4
fi

Note:

if 语句进行判断是否为空

[ "$name” = "" ]

等同于

[ ! "$name" ]

[ -z "$name" ]

Note:

使用if语句的时候进行判断如果是进行数值类的 ,建议使用 let(())进行判断

对于字符串等使用test[ ] or [[ ]] 进行判断

(())中变量是可以不使用$来引用的

example:表述数字范围的时候 可以使用if可以是使用case

if [ $x -gt 90 -o $x -lt 100 ]
case $x in
100)
9[0-9])

if [ "X$name" != "x" ]

这个语句的意思是如果$name为空,那么X=X成立折执行下面的结果;

写脚本的时候很多时候需要用到回传命令,$?如果上一个命令执行成功,回传值为0,否则为1~255之间的任何一个

0为真 非0为假

来自: https://blog.51cto.com/lovelace/1211353

引号/单引号/反引号

  • 双引号(" “):在双引号中,除了$, ‘’, `和\以外所有的字符都解释成字符本身。也就说可以读取变量
  • 单引号(’ ‘):在单引号中所有的字符包括特殊字符($,’’,`和\)都将解释成字符本身而成为普通字符。
  • 反引号(` `):在反引号中的字符串将解释成shell命令来执行。

来自:https://www.jb51.net/article/108330.htm

变量

字符串变量

注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

your_name="qinjx"
echo $your_name
echo ${your_name}
your_name="xkj"
echo $your_name

Shell 数组

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。

类似于 C 语言,数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。

定义数组 在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:

数组名=(值1 值2 ... 值n)

例如:

array_name=(value0 value1 value2 value3)

可以不使用连续的下标,而且下标的范围没有限制。

array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

读取数组元素值的一般格式是:

${数组名[下标]}
# 例如:
valuen=${array_name[n]}
echo ${array_name[@]} #输出全部元素

来自: https://www.runoob.com/linux/linux-shell-variable.html

参数取值

$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2

$? 上个命令的退出状态,或函数的返回值。成功返回0,失败返回1

$# 传递给脚本或函数的参数个数

$* 所有这些参数都被双引号引住。若一个脚本接收两个参数,$等于$1$2

$0 正在被执行命令的名字。对于shell脚本而言,这是被激活命令的路径

$@ 被双引号(” “)包含时,与 $* 稍有不同。若一个脚本接收到两个参数,$@等价于$1$2

$$ 当前shell的进程号。对于shell脚本,这是其正在执行时的进程ID

$! 前一个后台命令的进程号

https://www.cnblogs.com/ipoke/p/11417479.html