Shell 脚本实践

1. 脚本判断命令输出是否为空

(1)判断字符串为空

  if [ "$str" =  "" ] 
  if [ x"$str" = x ]
  if [ -z "$str" ] (-n 为非空)
  注意:都要代双引号,否则有些命令会报错,养成好习惯吧!  

2.输入y/n

  可以使用判断符号进行数据的判断,如检查某变量是否为空 [ -z $SHELL ],需要注意的是中括号(“[]”)内的组件必须以空格隔开。有以下脚本:

#!/bin/bash
read -p "input you choice(y/n):" choice
[ "$choice" == "y" ] || [ "$choice" == "Y" ] && echo "OK,continue" && exit 0
[ "$choice" == "n" ] || [ "$choice" == "N" ] && echo "Oh,interrupt!" && exit 0
echo "I don‘t know what is your choice" && exit 0
#! /bin/sh

echo "Is it morning? Please answer yes or no."
read YES_OR_NO
if [ "$YES_OR_NO" = "yes" ]; then
  echo "Good morning!"
elif [ "$YES_OR_NO" = "no" ]; then
  echo "Good afternoon!"
else
  echo "Sorry, $YES_OR_NO not recognized. Enter yes or no."
  exit 1
fi
exit 0

  

(3)while条件循环

和C语言类似。比如一个验证密码的脚本:

#! /bin/sh
echo "Enter password:"
read TRY
while [ "$TRY" != "secret" ]; do
  echo "Sorry, try again"
  read TRY
done
下面的例子通过算术运算控制循环的次数:

#! /bin/sh

COUNTER=1
while [ "$COUNTER" -lt 10 ]; do
  echo "Here we go again"
  COUNTER=$(($COUNTER+1))
done

(3)case 和 while 结合

#!/bin/bash
while :                                   :表示真,一直循环
do                                        要循环执行的命令
        echo -n "enter any number [1-5]:" 输入序号1-5
        read nu                            设置read的变量
        case $nu in                        进行选择,输入的要是1-5的数字
        1|2|3|4|5)
                echo "enter anumber 1 and 5" 就循环这一行,让你不停的输入1-5
                ;;
        *)                                   如果输入的不是1-5的数字
                echo -n "wrong number, continue (y/n?:)"   询问你是否继续
                read con                     设置read的变量
                case $con in                 进行选择,看是不是y|yes|Y|YES这几个
                y|yes|Y|YES)
                        continue              如果是,那么就跳过,让你重新输入,如果不是
                        ;;
                *)                             那么就执行这个break退出循环
                        break
                        ;;
                esac
        esac
done

 

  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。