# *人生就有许多这样的奇迹,看似比登天还难的事,有时轻而易举就可以做到,其中的差别就在于非凡的信念。*
上篇闪电入门,讲解了最长用的if判断语句,除了这些还有case/switch,以及循环中的for、do while循环。
我建议,先有印象格式用到了再看一眼就好,没必要一上来都死记硬背。今天再给大家分享些常用的循环、函数和参数。
shell 循环递归
#!/bin/bash
function recursive_func() {
echo -n "Press anything to continue loop"
read input
recursive_func
}
recursive_func
exit 0
该递归脚本,使用read等待用户输入,并将其保存到$input变量中,每当read结束之后,便会再次调用自身,会不断循环下去,直到Ctrl+C退出。 输入数据按下回车之后,才能进行下次循环。
shell循环之for
#!/bin/bash
for (( ; ; ))
do
echo "loop ever"
sleep 1
done
exit 0
使用了for和(( ; ; )) 组合成了无限循环,不断输出loop ever 并每次sleep 1秒。
直到Ctrl+C退出。
shell循环之while
#!/bin/bash
EXIT_PLEASE=0
while :
do
echo "Pres CTRL+C to stop ..."
sleep 1
if [ $EXIT_PLEASE != 0 ]; then
break
fi
done
exit 0
脚本中使用了空命令的while循环,将会无限循环,直到按下Ctrl+C退出。
shell循环之untile
考虑使用不多,就不赘述了,有兴趣自行查找。
shell脚本之函数
function是shell脚本预留的一个关键字。
函数可接受参数,参数类似于变量,可在函数外部设置,函数内使用。
#!/bin/bash
.function my_firstFunction() {
local PARAM_1="$1"
local PARAM_2="$2"
local PARAM_3="$3"
echo "${PARAM_1} ${PARAM_2} ${PARAM_3}"
}
my_firstFunction "a" "b" "c"
脚本中的函数使用了function保留字声明为my_firstFunction。函数的内容使用{}包围。
1.其中 "$1" "$2" "$3"分别表示第一个参数,第二个参数,第三个参数。
2. 关键字local表示以此关键字声明的变量只能在该函数中访问。
3. 调用函数的时候,只需要提供函数名称和参数即可。
实例分享
需求:
我们需要启动多个的shell脚本,且启动的脚本是可选择的,这应该怎么办?
分析: 启动多个脚本------- 需要shell脚本的地址 启动脚本可选择----- 需要判断且可循环
根据需求,分析出了需要的技术要求,最主要的就是2中的技术功能。这让我想到了守护进程。
#!/bin/bash
FilePath1="./test1.sh" # 目录中的脚本
FilePath2="./test_f/test2.sh"
FilePath3="./for_test.sh"
function run_sh1 () {
# cd $FilePath1
bash ${FilePath1}
}
function run_sh2 () {
bash ${FilePath2}
}
function run_sh3 () {
bash ${FilePath3}
}
function echo_fun () {
echo -e "${FilePath1} --> fun_sh1 --> input 1 "
echo -e "${FilePath2} --> fun_sh2 --> input 2 "
echo -e "${FilePath3} --> fun_sh3 --> input 3 "
}
while :
do
echo_fun
read input
if [ ${input} -eq 1 ]; then
run_sh1
elif [ ${input} -eq 2 ]; then
run_sh2
else
run_sh3
fi
done
有这样一个简单的脚本,我们启动的时候可以有选择性的去启动,也算是比较简单的方式了。同时也是对函数,循环,判断的一个简单的综合应用。其他的就是依靠这些基础进行进一步学习了。
当然,上面的仅仅是一个简单的事例,最终可能会有sudo权限执行的问题,以及脚本中嵌套输入的问题,还有后台启动等等,我们之后聊吧!
最后的追叙:
脚本其实没有很复杂,看我这两篇再多写写就会了,简单的几行就能基本满足我们日常的工作需求。
到此闪电入门shell结束啦!对你有帮助,希望可以点赞,分享,投币,感谢你对我的支持,同时也想对你说一声,爱学习你的超帅、超棒、超厉害的!