linux-shell语法


变量

语法a=ba为变量名,b为变量值。
让其他函数输出作为变量

a=$(ls)
# 或者使用反引号
a=`ls`

命名规则,变量名只能由字母数字下划线组成,且不能是数字开头,且不能是shell里面的关键字。
使用变量,使用$表示取变量值,为了具体变量名可以用{}括起来,防止引发歧义。

变量类型

运行shell时,会同时存在三种变量:

  • 局部变量,局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  • 环境变量,所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  • shell变量,shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

变量修饰符

可以用相关修饰符控制变量的某些属性:

  • export标记导出变量,便于其他shell文件使用当前变量
  • readonly标记可以将变量变成只读变量
  • unset标记删除变量

字符串

shell字符串,用单引号或双引号描述

  • 单引号表示纯字符串,会将内容完全看成字符串
  • 双引号表示字符串中可以使用变量,也支持转义字符
  • 两者可以交叉使用,以最外层的引号为基准,进行字符串语义识别

字符串操作

  • 拼接,将字符串写在一起即可表示拼接字符串
  • 获取长度,使用${#str}获取字符串str的长度
  • 截取子串,使用${str:1:3}截取字符串str的第二个字符到第4个字符(索引从0开始,截取区间左闭右闭)

数组

shell数组,用圆括号括起多个元素,即为数组。

  • 通过方括号取对应索引的值,可以用数字下标获取(从0开始),${array[0]}
  • @*表示数组中所有元素,${array[@]}${array[*]}
  • #表示获取数组长度,配合@可以获取数组长度,${#array[@]}

参数

获取传入参数

  • $#,传入参数个数
  • $*,传入所有参数列表,如果用双引号则表示"$1 $2 ... $n"
  • $$,当前脚本运行进程号
  • $!,后台运行第一个进程号
  • $@,与$*类似,用双引号表示"$1" "$2" ... "$n"
  • $-,显示当前shell使用的选项
  • $?,上一个shell语句的退出码

条件判断

if

语法

if [ c1 ]; then
elif [ c2 ]; then
else
fi

使用条件判断语句,每个条件使用方括号[]包含,也可用双圆括号包含(()),双圆括号能够识别大于小于符号语义,如果方括号使用大于小于符号则会被认为是输入输出重定向,条件用于为真

if [ "$a" -gt "$b" ]; then
    ...
fi

if (( $a > $b )); then
    ...
fi

判断命令

在方括号中可以使用的快速判断函数

  • -aand)条件与
  • -bblock)是否是块设备
  • -cchar)是否是字符设备
  • -ddir)是否是文件夹
  • -eexist)文件目录是否存在
  • -eqequal)相等
  • -ffile)是否是文件
  • -g是否设置了SGID位
  • -gegreate then or equal)大于等于
  • -gtgreate then)大于
  • -k是否设置了粘置位(Sticky Bit)
  • -leless then or equal)小于等于
  • -ltless then)小于
  • -nnot zero)字符串长度是否不为0
  • -nenot equal)不相等
  • -oor)条件或
  • -rread)文件是否可读
  • -s文件是否为空
  • -ppipe)是否是管道
  • -u是否设置了suid
  • -wwrite)文件是否可写
  • -x文件是否可执行
  • -zzero)字符串长度是否为0
  • ==变量是否相等
  • !=变量是否不相等
  • !条件取反
  • $变量是否空

case

语法

case $cmd in
  cmd1)
  ;;
  cmd2)
  ;;
  *)
  ;;
esac
  • ;;表示执行后退出case
  • *表示通配符

循环

for

语法

# 遍历模式
for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

# 索引模式
for(( i=0;i < N;i++ ))
do
    command1
    command2
    ...
    commandN
done

while

条件为真时执行
语法

while condition
do
    command
done

until

执行一直到条件为真时停止
语法

until condition
do
    command
done

break

终止本次循环并且跳出循环

continue

终止本次循环开始下次循环

函数

使用function表示函数,参数由$获取,参数使用与上述参数使用方式相同。
语法

[ function ] funname [()]
{
    action;
    [return int;]
}

其中函数表示function可以省略,函数参数标识圆括号也可省略,即可以直接用funcname{}也可。


文章作者: djaigo
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 djaigo !
评论
  目录