shell 脚本基本语法及简单应用
变量赋值:
aa=11 bb=22
等号两遍不得出现空格
环境变量:
当前shell环境的变量
export VARNAME=VALUE 设置环境变量
unset VARNAME 撤销变量
查看变量:
set 查看所有变量
printenv env ecport 查看当前shell中的环境变量
特殊变量:
- $? 保存上一个命令执行的返回状态 0正确 1错误
- $# 输入参数的个数
- $* 参数列表
- $@ 参数列表
- $0 执行脚本的名字
- $_ 代表上一个命令最后一个参数
- $! 代表最后指令后台命令的PID
数字运算及运算符:
- dd=$(expr $aa + $bb) // +号两侧必须有空格
- dd=$(( $aa + $bb))
- dd=$[ $aa + $bb ]
cc=$((1 && 0)) //逻辑与运算,两边都是1,结果为1 ; 否则为0
条件判断命令:
test n1 -参数 n2 //真返回0,假返回1
整数:
参数列表为
- -lt 小于
- -le 小于等于
- -gt 大于
- -ge 大于等于
- -eq 等于
- -ne 不等于
可用中括号代替test
[ 1 -lt 4 ] //表达式与中括号间有空格
字符串测试
- s 字符串非空
- s1 = s2
- s1 != s2
- -z 字符串为空
- -n 字符串长度大于0
文件测试:
- -f 存在且是普通文件
- -f 存在且是目录
- -s 存在且字节数大于0
- -r 存在且可读
- -w 存在且可写
- -x 存在且可执行
[ -f filename ] //判断文件是否为文件
其他参数:
- -a 逻辑与
- -o 逻辑或
- ! 逻辑非
控制流程:
//if 控制流程 if ls -l | grep "$1" > /dev/null
if [ $# -eq 0 ]
then
echo ""
else if [ $# -gt 1 ]
then
echo ""
else
echo ""
fi
//case 控制流程
case "$#" in
0)
echo ""
1)
echo ""
*)
echo ""
esac
//for 控制流程
for i in `seq 1 9` //生成列表 {0...100} seq 1 100 seq 2 2 100
do
echo `expr $i \* 10` *乘号前加转义符
done
//while 控制流程 while true
i=1
sum=0
while [ $i -le 100 ]
do
sum=$[ $sum+$i ]
i=$[ $i+1 ]
done
echo $sum
read 变量1 变量2
可以从键盘上读取多个变量的值
如果输入的数据不够,没有输入的为空
如果输入的数据超过,则将最后一个变量被赋予所有剩余的值
read a b
echo $[
b ]
shell 定义函数:
函数名()
{
命令
}
//或者
function 函数名()
{
命令
}
/例子
hello()
{
echo "hello world !!"
}
//调用时,直接调用函数名即可
shell 数组和关联数组:
//定义一个数组:
array=(1 2 3 4 5 6)
//或者
array[0]="test1"
array[1]="test2"
array[2]="test3"
//打印数组:
echo $ {array[0]}
index=0
echo $ {{array[$index]}
echo ${array[*]}
//打印数组长度:
echo ${#array[*]}