shell secript:
执行方式的差异:
./ sh执行都是在创建一个子程序来执行,只会继承环境变量,
其中的变量如果export声明,子程序的子程序会继承,不会升级为环境变量
source 的执行方式是把脚本放到父程序的环境执行,
其中的变量如果export声明,会升级成环境变量
test判断,[]判断是一样的,建议使用[]的判断方式
默认变量($0, $1......)
$0,$1....位置变量,代表参数 $#:代表参数的个数 [email protected]:代表参数"$1""$2""$3""$4" $*:代表"$1c$2c$3c$4",其中c为分隔符,默认是空白
shift:变量偏移
每执行一次,判断的位置向右移动一个
条件判断:
if [ 条件判断式 ];then
内容
fi
&&代表AND; ||代表or
-a:代表and; -o代表or
if [ 条件判断式 ];then
内容
elif [ 条件判断式 ];then
内容
fi
利用case .... esac判断
case $变量 in
"第一个变量内容")
程序段
;;
"第二个变量内容")
程序段
;;
"*")
exit 1
;;
esac
循环:
while do done
while [ condition ]
do
程序段
done
当condition成立时,就执行循环,不成立则停止
until [ condition ]
do
程序段
done
当condition成立时,就立则停止,不成立,则循环
for ... do ...done
for var in con1 con2 con3
do
程序段
done
数值处理
for((初始值; 限制值; 执行步骤))
do
程序段
done
乱数与阵列array
${RANDOM} 的取值范围[0,32767]
#!/bin/bash
#
e[1]="aaa"
e[2]="bbb"
e[3]="ccc"
en=3
check=$(( ${RANDOM} * ${en} / 32767 + 1))
echo ${e[${check}]}
function函数:
function fname(){
程序段
}
函数也具有位置变量,$0,$1,$2
shell script的debug
sh:
-n:不要执行script,仅查询语法问题
-v:在执行前,把script内容输出到屏幕上
-x:将使用到的script内容显示在屏幕上
原文地址:https://www.cnblogs.com/djoker/p/9413212.html