shell基础:通过7个实例入门shell编程

编程的学习有两种方式,一种是先学习理论再进行实战,这叫自下而上学习法,第二种是通过实战再学习理论,这叫自上而下学习法,对于shell脚本学习来说,自上而下学习法是最好的学习方式。

实例1:通过脚本检查服务状态:

#!/bin/bash
#set -x
if [ $# -ge 1 ];then
        systemctl status $1 > /dev/null;
        if [ $? -eq  0 ];then
         echo "$1 is `systemctl status $1 | sed -n 3p | awk '{print $2,$3}'`"
        else
         echo "$1未运行,或检查$1是否是有效的服务名称"
        fi
else
        echo "请在此命令后加上参数:sh $0 服务名称"

fi

shell命令都是以#!/bin/bash开头,set -x表示显示代码执行过程,-v表示显示代码

if语句需要以fi结束,当then和if在同一行时,需要加分号,if的条件写在一个中括号中,要注意空格,if和中括号之间有空格,中括号中的参数和中括号也需要有空格。

$# 表示输入的参数个数,$1 表示输入的第一个参数,其他数值同理

-ge表示大于等于;-gt表示大于;-eq表示等于;-le表示小于等于;-lt表示小于;-ne表示不等于

 systemctl status $1 > /dev/null;语句的意思是查询输入的第一个参数的运行状态,并重定向到一个空文件中,不会屏显任何信息。

$?查询前一条命令的执行结果,如果返回0表示前一条命令执行成功,否则表示执行失败,如:

shell基础:通过7个实例入门shell编程_第1张图片

我先查询mysql的执行状态,使用$?命令后显示0,因为前一条命令执行成功。

`systemctl status $1 | sed -n 3p | awk '{print $2,$3}'`这条语句需要注意的是要写在反引号中,“|”为通道,即前面的输出是后面的输入,这条语句的意思为查询参数1的服务状态,选择输出内容的第三行,选择第二列和第三列,即上图中的active(exited)

学习上面的内容后这条脚本的意思就理解清楚了,首先判断参数的个数,如果参数个数等于1,则查询这个参数的状态,如果查询结果成功,则输出结果。

实例2:通过脚本检查多个服务状态:

#!/bin/bash
#set -x
if [ $# -gt 0 ];then
 for i in $@
  do
   systemctl status $i &> /dev/null
   if [ $? -eq 0 ];then
    echo "$i is `systemctl status $i |sed -n 3p|awk '{print $2,$3}'`"
   else
    echo "$i 未正常运行"
   fi
  done
else
 echo "请加参数:bash $0 SERVICE_NAME"
fi

实例2在实例1的基础上增加了一个for循环,shell中的for循环格式如下:

for   do  ...  done

这里还用到了$@,类似于把输入的参数按照空格分隔为数组,通过for循环分别读取参数,其余的操作和实例1类似。

实例3:if的用法

#!/bin/bash
read -p "please input your record" cj
if [ $cj -ge 0 ]&&[ $cj -le 59 ];then
 echo "补考"
elif [ $cj -ge 60 ]&&[ $cj -le 70 ];then
 echo "一般"
elif [ $cj -ge 71 ]&&[ $cj -le 85 ];then
 echo "良好"
elif [ $cj -ge 86 ]&&[ $cj -le 100 ];then
 echo "优秀"
else
 echo "Please input a valid record(0-100)"
fi

read命令读取输入的参数给到自己设置的变量cj,-p表示输出一条提示

实例4:for循环的用法1

#!/bin/bash
s=0
for((i=1;i<=10;i++))
 do 
  s=$[$s+$i]
 done
echo $s

这段代码的意思是求10以内数字的累加之和,当中括号用在运算中时,符号之间不需要加空格

实例5:for循环的用法2

#!/bin/bash
echo "---------------------"
for i in "$*"
 do
  echo "god bless $i"
 done

echo "---------------------"
for j in "$@"
 do
  echo "I love $j"
 done
echo "-------------------"

当不加双引号时,$*$@的作用一样,表示循环读取命令行参数,加了引号之后,“$*”表示输出一个整体,效果如下:

shell基础:通过7个实例入门shell编程_第2张图片

实例6:while循环的用法

#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
 do
  s=$[$s+$i]
  i=$[$i+1]
 done
echo $s

while循环的格式和for循环相似,这段程序表示100以内数字累加之和

实例7:函数的用法

#!/bin/bash
read -t 5 -p "Please input number: " p1
read -t 5 -p "Please input number: " p2
function sum()
{
s=0;
s=$[$1 + $2]
echo $s
}
sum $p1 $p2

shell中的函数和c语言中的函数类似,但是他不需要在括号中输入参数,上面这段代码的意思就是求输入的两个参数之和。read命令在这里多了一个-t参数,表示5秒内如果不操作,就会跳过。

你可能感兴趣的:(Linux)