总结一下脚本进阶实验(感想)
1.打印国际象棋
#!/bin/bash
#**************************************************
#Author: jsying
#QQ: 2992679364
#Date: 2017-09-16
#FileName: cheer.sh
#Descriptions: The test script
#**************************************************
red(){ echo -ne "\033[41m \033[0m"; }
yellow(){ echo -ne "\033[43m \033[0m"; }
for i in `seq 9`; do
for k in `seq 3`;do
for j in `seq 9`; do
let sum=i+j
let mod=sum%2
if [ $mod -eq 1 ]; then
red
else
yellow
fi
done
echo
done
done
2. 斐波那契数列又称黄金分割数列,因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,
故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……,
斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)
(n≥2)利用函数,求n阶斐波那契数列
#!/bin/bash
#**************************************************
#Author: jsying
#QQ: 2992679364
#Date: 2017-09-16
#FileName: shulie.sh
#Descriptions: The test script
#**************************************************
read -p "请输入数列个数:" n
fib(){
if [ $1 -eq 0 ] ; then
ret=0
echo $ret
elif [ $1 -eq 1 ]; then
ret=1
echo $ret
elif [ $1 -gt 1 ]; then
let ret=$(fib $[$1-1])+$(fib $[$1-2])
echo $ret
fi
}
for i in `seq $n`; do
fib $i
done
#!/bin/bash
3.编写服务脚本/root/bin/testsrv.sh,完成如下要求
(1) 脚本可接受参数:start, stop, restart, status
(2) 如果参数非此四者之一,提示使用格式后报错退出
(3) 如是start:则创建/var/lock/subsys/SCRIPT_NAME, 并显示“启动成功”
考虑:如果事先已经启动过一次,该如何处理?
(4) 如是stop:则删除/var/lock/subsys/SCRIPT_NAME, 并显示“停止完成”
考虑:如果事先已然停止过了,该如何处理?
(5) 如是restart,则先stop, 再start
考虑:如果本来没有start,如何处理?
(6) 如是status, 则如果/var/lock/subsys/SCRIPT_NAME文件存在,则显示“SCRIPT_NAMEis running…”
如果/var/lock/subsys/SCRIPT_NAME文件不存在,则显示“SCRIPT_NAME is stopped…”
其中:SCRIPT_NAME为当前脚本名
#!/bin/bash
#**************************************************
#Author: jsying
#QQ: 2992679364
#Date: 2017-09-16
#FileName: testsrv.sh
#Descriptions: The test script
#**************************************************
srvfile="/var/lock/subsys/`basename $0`"
func_start(){
if [ -e $srvfile ];then
echo "服务已启动,无需再次启动"
else
touch $srvfile
echo "启动成功"
fi
}
func_stop(){
if [ -e $srvfile ];then
rm -f $srvfile
echo "停止完成"
else
echo "服务未启动,无需停止"
fi
}
func_restart(){
func_stop
func_start
}
func_status(){
if [ -e $srvfile ];then
echo "`basename $0` is running..."
else
echo "`basename $0` has stoped..."
fi
}
case $1 in
"start")
func_start
;;
"stop")
func_stop
;;
"restart")
func_restart
;;
"status")
func_status
;;
*)
"输入参数错误, Usage: `basename $0` start|stop|restart|status"
;;
esac
4.打印九九乘法表
#!/bin/bash
#**************************************************
#Author: jsying
#QQ: 2992679364
#Date: 2017-09-16
#FileName: chengfa.sh
#Descriptions: The test script
#**************************************************
for i in `seq 9`; do
for j in `seq $i`; do
let x=i*j
echo -ne "${i}x${j}=${x}\t"
done
echo
done
5.打印等腰三角形
#!/bin/bash
#**************************************************
#Author: jsying
#QQ: 2992679364
#Date: 2017-09-16
#FileName: sanjiaoxing.sh
#Descriptions: The test script
#**************************************************
read -p "请输入等腰三角形行数:" line
# 判断输入的是否是数字
expr $line + 1 &>/dev/null
if [ $? != "0" ];then
echo 输入错误,退出。
exit
fi
# 循环打印
for cur_line in `seq $line`;do
let space=line-cur_line
let filler=2*cur_line-1
if [ $space == 0 ]; then
printf %${filler}s " " |tr " " "*"
echo
else
printf %${space}s " "
printf %${filler}s " " |tr " " "*"
printf %${space}s " "
echo
fi
done
简单介绍一下语法:
if语法
单分支
if 判断条件;then
条件为真的分支代码
fi
双分支
if 判断条件; then
条件为真的分支代码
else
条件为假的分支代码
多分支
if 判断条件 1 ; then
条件为真的分支代码
elif 判断条件 2 ; then
条件为真的分支代码
elif 判断条件 3 ; then
条件为真的分支代码
else
以上条件都为假的分支代码
fi
case语法
case 用 变量引用 in
PAT1)
分支1
;;
PAT2)
分支2
;;
...
*)
默认分支
;;
esac
for 语法
for 变量名 in 列表;do
循环体
done
for 循环的特殊格式:
for (( 控制变量初始化; 条件判断表达式; 控制变量的修正表达式))
do
循环体
Done
While 语法
while CONDITION; do
循环体
Done
特殊用法
while 循环的特殊用法(遍历文件的每一行):
while read line; do
循环体
done < /PATH/FROM/SOMEFILE
依次读取/PATH/FROM/SOMEFILE 文件中的每一行,且将
行赋值给 变量line
感想:
1.shell脚本对对于一个运维工程师很重要。
2.自己在学习shell脚本进阶的一个星期里,看到自己很多的缺点;
自己的逻辑思维很low,学习脚本对于自己是很吃力的。
3.自己也通过这一个星期,知道该如何突破自己以前的思维模式。
4.前方的路还有很长,无论今后怎样,希望自己永远保持一颗乐观,上进的心。
5.加油,致年轻的自己。