总结一下脚本进阶实验(感想)

1.打印国际象棋
#!/bin/bash
#**************************************************
#Author:                  jsying
#QQ:                      2992679364
#Date:                    2017-09-16
#FileName:                cheer.sh
#Descriptions:            The test script
#**************************************************
red(){ echo -ne "33[41m      33[0m"; }
yellow(){ echo -ne "33[43m      33[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} "
    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.加油,致年轻的自己。

原文地址:https://www.cnblogs.com/jiesying/p/7530007.html