一 逻辑操作符(门电路)
说明:学习中,使用中记忆!
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命令