shell之流程控制

if_for_while.sh

#!/bin/bash

#判断crond进程是否运行
NAME=crond
NUM=$( ps aux |grep $NAME |grep -vc grep )#去除grep进程
if [ $NUM -eq 1 ]; then
    echo "$NAME running."
else
    echo "$NAME is not running!"
fi

#判断是否能够ping通51cto.com
#if语句可以直接对命令状态进行判断,就省去了获取$?这一步!
if  ping -c 2 51cto.com > /dev/null ;then
        echo "ok"
else
        echo "no"
fi

#if... then ...  elif... then... else... fi


#循环列表
for i in {1..3};do
        echo -n $i
done
echo

#for 循环目录
for i in `ls /`;do
echo $i
done

#默认for循环的取值列表是以空白符分隔
for i in 1 2 3 4 5 6 7;do
        echo -n $i
done
echo

#如果要指定分隔符,可以重新赋值$IFS变量
old_IFS=$IFS
IFS=":"
for i in $(head -1 /etc/passwd);do
        echo -n $i
done
IFS=$old_IFS
echo

#for语句的C语言风格
for ((i=0;i<=5;i++));do
        echo -n $i
done
echo


#检查多个主机是否存活
for ip in 192.168.217.{1..3};do
        if ping -c 1 $ip >/dev/null;then
                echo "$ip ok"
        else
                echo "$ip no!"
        fi
done

#while语句
#break
n=0
echo "break:"
while true;do
        let n++
        if [ $n -eq 5 ];then
                break
        fi
done

#continue
n=0
while [ $n -lt 5 ];do
        let n++
        if [ $n -eq 4 ];then
                continue
        fi
        echo $n
done

#while循环按行读取文件
cat a.txt |
while read line;do
echo $line
sleep 1
done

#重定向读取
while read line;do
echo $line
sleep 1
done < a.txt

#for循环读取
old_IFS=$IFS
IFS="\n"
for i in `cat a.txt`;do
echo $i
sleep 1
done
IFS=$old_IFS


#case条件分支
[ $# -ne 1 ] && echo 'error1' && exit #传入的参数个数不等于1
choice=$1
start(){
        echo "start"
}
stop(){
        echo "stop"
}
restart(){
        echo "restart"
}

case $choice in
start|1)#start 或者 1 皆可
        start ;; #两个分号
stop|2)
        stop ;;
restart|3)
        restart ;;
*)
        echo 'error2'
esac #与if类似

在执行这个脚本的时候,想让它停止执行,于是再打开一个终端,输入

ps aux | grep if_for.sh #找到进程的PID
kill PID

你可能感兴趣的:(shell)