shell(四)逻辑表达式

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/wzj_110/article/details/100154653

一    逻辑操作符(门电路)

说明:学习中,使用中记忆!

and 乘法,or是加法

练习

[root@server1 mnt]# ll
total 8
---------- 1 root root 11 Aug 29 12:29 temp
drwxr-xr-x 4 root root 34 Aug 29 12:12 wzj
-rw-r--r-- 1 root root 56 Aug 30 11:36 wzj.sh
[root@server1 mnt]# f1=/mnt/temp;f2=/mnt/wzj.sh 
[root@server1 mnt]# [ -f "$f1" -a -f "$2" ] && echo 1 || echo 0
0
# 说明:拆开可以用&&来连接!
[root@server1 mnt]# [ -f "$f1" ] && [ -f "$2" ] && echo 1 || echo 0

# 注意:上述的区别,是不是一个整体!

细节:对于文件类型的判断,软链接既是f也是-h(link)!

跟着标准学习,之后自己变动!

练习2

开发shell脚本分别实现

(1)定义变量(接受脚本传参变量),脚本传参(判断参数个数)以及read读入的方式(有提醒)比较2个整数大小                      # 三种方式!
(2)用条表达式(不使用if)进行判断并以屏幕输出的方式提醒用户比较结果           
(3)当用脚本传参以及read读入的方式需要对变量是否为数字、并且传参个数不对给予提示

判断:如何在Shell中判断一个变量是否为整数

利用expr做计算时变量或字符串必须是整数的规则

把一个变量或字符串和一个已知的整数(非0)相加

结论:看命令返回的值是否为0.如果为0,就认为加法的变量或字符串为整数
#!/bin/bash
#(1)read读入两个整数
read -p "Please input two nums:" number1 number2
# a=$number1;b=$number2
# shell中多行注释的方式
:<<EOF
#(1.5) 判断个数是不是两个-——>脚本传参的形式(方式1)!
[ "$#" -ne 2 ] && {
        echo "USAGE: num1 num2"
        exit 1
}

# 判断是不是整数(单个判断,需要一个一个的来)

[ "`echo "$1" | sed -r 's#[^0-9]##g'`" = "$1 ] || { echo "Must be interger!"}
EOF

########可能的三种结果########

#(2) 判断是不是整数-->小技巧
expr $number1 + $number2 + 0 &>/dev/null || {
        echo "Warning: Must two integer args"
        exit 2
}
#(3) 进行判断-->相等
[ "$number1" -eq "$number2" ] && {
        echo "$number1=$number2"
        exit 0
}
#(4) 进行判断--大于
[ "$number1" -ge "$number2" ] && {
        echo "$number1>$number2"
        exit 0
}
#(5) 进行判断--小于
[ "$number1" -le "$number2" ] && {
        echo "$number1<$number2"
        exit 0
}

另一种思路:判断是不是整数

[ "`echo "$1" | sed -r 's#[^0-9]##g'`" = "$1 ] && echo 1 || echo 0

# r-->扩展正则表达式!

# 思路:把不是数字的删除看与本身是否相等!

get小技巧

vim 中可以用#代替反斜杠/

核心:健壮性!

需求2:打印选择菜单,一键安装web服务

#!/bin/bash
#(0)定义函数
menu(){
# 直接输出内容-->后续可以带上颜色(echo)
cat <<EOF
        1.[install lamp]
        2.[install lnmp]
        3.[exit]
        which item do you want to choice:
EOF
}
#(1)调用函数
menu
#(2)提示用户输入-->上面已经给出
read num
#(3)判断哪个选项执行对应的操作
[ "$num" = "1" ]&&{
        # 提示
        echo "start installing lamp."
        # 开始干活,判断是否有权限-->细节{ exit 2 }是错误的--->{exit 2}是正确的!
        [ -x /mnt/lnmp.sh ] ||exit 2
        # 执行
        /mnt/lnmp.sh
        # 执行完之后推出
        exit 0
}
[ "$num" = "2" ]&&{
        # 提示
        echo "start installing lamp."
        # 开始干活,判断是否有权限
        [ -x /mnt/lamp.sh ] ||exit 3
        # 执行
[ "$num" = "3" ]&&{
        echo "exit"
        # 正常推出
        exit 0
}

# 其它的情况-->用户输入其它情况
echo "Input Error"
exit 1

多级菜单

#!/bin/bash
#(1)将环境加载进来-->做判断-->source进来
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
#(2)多级菜单--->有颜色显示
function menu(){
cat << EOF
----------------------------------------------
|*******Please Enter Your Choice:[1-4]*******|
----------------------------------------------
*   `echo -e "\033[35m 1)lamp install\033[0m"`
*   `echo -e "\033[35m 2)lnmp install\033[0m"`
*   `echo -e "\033[35m 3)quit\033[0m"`
*   `echo -e "\033[35m 4)return main menu\033[0m"`
EOF
}
#(3)事先定义好的lamp菜单--->安装各个模块
function lamp_menu(){
cat << EOF
----------------------------------------------
|*******Please Enter Your Choice:[1-4]*******|
----------------------------------------------
*   `echo -e "\033[35m 1)http install\033[0m"`
*   `echo -e "\033[35m 2)mysql install\033[0m"`
*   `echo -e "\033[35m 3)php install\033[0m"`
*   `echo -e "\033[35m 4)return main menu\033[0m"`
EOF
read -p "####please input second_lamp optios[1-4]: " num2
expr $num2 + 1 &>/dev/null  #这里加1,判断输入的是不是整数
if [ $? -ne 0 ];then        #如果不等于零,代表输入不是整数
 echo "###########################"
 echo "Waing !!!,input error   "
 echo "Please enter choose[1-4]:"
 echo "##########################"
 exit 1
fi

#如果是整数,看匹配哪一个

case $num2 in
  1)
   action "Installed httpd..." /bin/true
   sleep 2
   # 调用lamp菜单的函数
   lamp_menu
   ;;
  2)
   action "Installed MySQL..." /bin/true
   sleep 2
   lamp_menu
   ;;
  3)
   action "Installed PHP..." /bin/true
   sleep 2
   lamp_menu
   ;;
  4)
   clear
   menu
   ;;
  *)
   clear
   echo 
   echo -e "\033[31mYour Enter the wrong,Please input again Choice:[1-4]\033[0m"
   lamp_menu
esac
}
function lnmp_menu(){
cat << EOF
----------------------------------------------
|*******Please Enter Your Choice:[1-4]*******|
----------------------------------------------
*   `echo -e "\033[35m 1)nginx install\033[0m"`
*   `echo -e "\033[35m 2)mysql install\033[0m"`
*   `echo -e "\033[35m 3)php install\033[0m"`
*   `echo -e "\033[35m 4)return main menu\033[0m"`
EOF

read -p "please input second_lnmp options[1-4]: " num3
expr $num2 + 1 &>/dev/null  #这里加1,判断输入的是不是整数
if [ $? -ne 0 ];then        #如果不等于零,代表输入不是整数
  echo 
  echo "Please enter a integer"
  exit 1
fi
case $num3 in
   1)
     action "Installed Nginx..." /bin/true
     sleep 2
     lnmp_menu
     ;;
   2)
    action "Installed MySQL..." /bin/true
    sleep 2
    clear
    lnmp_menu
    ;;
   3)
     action "Installed PHP..." /bin/true
     sleep 2
     clear
     lnmp_menu
     ;;
   4)
    clear
    menu
    ;;
   *)
    clear
    echo
    echo -e "\033[31mYour Enter the wrong,Please input again Choice:[1-4]\033[0m"
    lnmp_menu
esac
}
clear
menu
while true ;do
 read -p "##please Enter Your first_menu Choice:[1-4]" num1
 expr $num1 + 1 &>/dev/null   #这里加1,判断输入的是不是整数。
  if [ $? -ne 0 ];then        #如果不等于零,代表输入不是整数--->错误的话就循环,知道输入正确!
    echo "----------------------------"
    echo "|      Waring!!!           |"
    echo "|Please Enter Right Choice!|"
    echo "----------------------------"
    sleep 1
  fi
# 判断哪个选项
   case $num1 in
      1)
       clear
       lamp_menu
       ;;
      2)
       clear
       lnmp_menu
       ;;
      3)
       clear
       break
       ;;
      4)
       clear
       menu
       ;;
      *)
       clear
       echo -e "\033[31mYour Enter a number Error,Please Enter again Choice:[1-4]: \033[0m"       
      menu
   esac
done

每个选项对应一个脚本

screen命令

猜你喜欢

转载自blog.csdn.net/wzj_110/article/details/100154653