最近几天一直在学习shell script,它真的是一项特别实用的工具。前面已经把判断式、循环都学完啦。所以到今天,这个shell专题也就没多少新的知识点了。多学习多实践,才能把它玩溜~
1. 搭配随机数与数组的实验
1.1 实践1
这里学一个有趣的例子,每天中午是不是都为吃什么发愁?
这里写一个shell,通过随机数的处理来帮我们选择~
- 撰写条件:
首先,将全部的店家输入到一组数组当中
然后,透过随机数的处理,去取得可能的数值
最后,将搭配到该数值的店家秀出来
vi what_to_eat.sh
输入如下代码:
#!/bin/bash
eat[1]="菠萝饭"
eat[2]="沙县馄炖"
eat[3]="湖南米粉"
eat[4]="康师傅方便面"
eat[5]="桂林米粉"
eat[6]="柳州螺蛳粉"
eat[7]="花甲粉"
eat[8]="煲仔饭"
eat[8]="喜茶"
eat[9]="肯德基"
eatnum=9 #需要输入有几个可用的餐厅数
check=$((${RANDOM}*${eatnum}/32767 + 1 ))#这里的${RANDOM}负责产生随机数
echo "You may eat ${eat[${check}]}"
按照需求,如果我每次想秀出3个不重复的店家呢?
1.2 实践升级
vi what_to_eat-2.sh
输入如下代码:
eated 取值0,1,2,通过随机数获得3次check
#!/bin/bash
eat[1]="菠萝饭"
eat[2]="沙县馄炖"
eat[3]="湖南米粉"
eat[4]="康师傅方便面"
eat[5]="桂林米粉"
eat[6]="柳州螺蛳粉"
eat[7]="花甲粉"
eat[8]="煲仔饭"
eat[8]="喜茶"
eat[9]="肯德基"
eatnum=9 #定义变量${eatnum}为9,即输入有几个可用的餐厅数
eated=0 #定义变量${eated}为0
while [ "${eated}" -lt 3 ]; do #${eated}小于3时即循环
check=$(( ${RANDOM}*${eatnum}/32767 + 1 ))
mycheck=0
if [ "${eated}" -ge 1 ]; then #判断${eated}是否大于等于1
for i in $(seq 1 ${eated}) #对于1-${eated}的连续的几个数
do
if [ ${eatedcon[$i]} == $check ]; then
mycheck=1
fi
done
fi
if [ ${mycheck} == 0 ]; then
echo "you may eat ${eat[${check}]}"
eated=$(( ${eated} + 1 ))
eatedcon[${eated}]=${check}
fi
done
2. shell script的追踪与debug
scripts在执行之前,最怕出现语法错误问题,bash直接有相关参数来判断是否有问题
工作模式:sh [-nvx] scripts.sh
-n
: 不要执行script,仅查询语法的问题
-v
:再执行script前,先将scripts的内容输出到屏幕上
-x
:将使用到的script内容显示到屏幕上(很有用哦,它会将script的执行过程全部列出来)
这里截鸟哥的图理解:
在输出的讯息中,在加号后面的数据其实都是指令串,由于sh -x的方式来将指令执行过程也显示出来,如此用户可以判断程序代码执行到哪一时段会出现相关的信息。这个功能可以透过显示完整的指令串,你可以依据输出的错误信息来订正你的脚本。
Postscript:
鸟哥箴言:在shell scripts的学习方法上面,需要“多看、多模仿、并加以修改成自己的样式”是最快的学习手段
网友评论