常用语法说明
# 获取字符串长度
str="Hello world"
echo ${#str}
# 提取字符串
echo ${str:1,3} #输出ell
#数组定义
array=(v1 v2 v3 v4 v5 v6 ...)
#或者使用下列方式
array[0]=v1
array[1]=v2
#读取数组
# @表示数组内所有元素
echo ${array[0]}
echo ${array[@]}
# 获取数组长度
echo ${#array[@]}
echo ${#array[*]}
# 获取单个元素长度
echo ${#array[n]}
# 注释
单行使用#
多行使用
:<<EOF
EOF
参数相关
# 参数个数
$#
# 所有的参数内容
$* # " 1 2 3 4 5 6"
$@ # "1" "2" "3" "4" "5" "6"
进程相关
# 当前进程号
$$
# 后台运行的最后一个进程id
$!
# 执行返回码
$?
算术运行
# 算术运算需要使用expr来完成,运算符中间必须分隔
# *前必须加\
# MAC的expr语法为$((express))
val=`expr 1 \* 30`
关系运算符
-ne # 不相等
-eq # 相等
-gt # 大于
-lt # 小于
-ge # 大于等于
-le # 小于等于
布尔运算符
-a # and
&& # and
-o # or
|| # or
! # not
字符串运算符
= #判断是否相等
!= #不相等
-z #判断长度是否为0
-n #判断长度是否不为0
文件相关
-b # 检测文件是否为块设备
-c # 检测文件是否为字符设备
-d # 检测文件是否为目录
-f # 检测文件是否为普通文件
-g # 检测文件是否设置了SGID位
-k # 检测文件是否设置了粘着位
-p # 检测文件是否为有名管道
-u # 检测文件是否设置了SUID位
-r #检测文件是否可读
-w #检测文件是否可写
-x #检测文件是否可执行
-s #检测文件是否为空
-e #检测文件或目录是否存在
-s #检测文件是否为socket
-l #检测文件是否为符号链接
流程控制相关
# if
if cond
then
statement
fi
# if else
if cond
then
statement
else
statement
fi
# if else-if
if cond
then
statement
elif cond2
then
statement
else
statement
# for 循环
for var in list
do
statement
done
# 死循环
for (( ; ; ))
do
done
# while
while cond
do
statement
done
# 死循环
while true
do
done
while :
do
done
# case
case val in
val1)
statement
;;
val2)
statement
;;
*)
statement
;;
esac
Here Document
command << delimiter
document
delimiter
# 作用就是将两个 delimiter 之间的内容(Here Document Content 部分) 传递给command 作为输入内容。