当前位置:首页 > linux基础 > 正文内容

Shell介绍(三)if判断,case控制,for循环,while循环,流程控制语句

6年前 (2019-09-08)linux基础722
if判断


单分支

if [你有房]
then
    我就嫁给你
fi
多分支
if [ 你有房 ]
then
    我就嫁给你
else
    拜拜
fi
if [ 你有房 ]
then
    我就嫁给你
elif [ 你有钱 ]
then
    我也嫁给你
elif [ 你爸是李刚 ]
then
    我也嫁给你
elif [ 活好!运维技术好 ]
then
    我倒贴也嫁给你
else
    拜拜
fi
单分支  一个条件  一个结果
双分支  一个条件  两个结果
多分支  多个条件  多个结果

案例: 根据操作系统不同的版本安装不同的源

1. 如何取出版本号
2. 如何做版本号的比对
3. 比对完成执行相对应的安装源
[root@web scripts]# cat yum.sh 
#!/bin/sh
ve=`cat /etc/redhat-release |awk '{print $(NF-1)}'`
#centos6.x使用以上命令获取不到版本号
if [ ${ve%%.*} -eq 7 ]
then
    #判断网络是否通畅ping 如果不通 则重启systemctl restart network 通继续执行
    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    #测试wget是否已安装 无安装先安装wget
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
elif [ ${ve%%.*} -eq 6 ]
then
    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
fi
case 流程控制语句
case 变量名4 in
    模式匹配1)
        命令的集合
            ;;
    模式匹配2)
        命令的集合
            ;;
模式匹配3)
         命令的集合
            ;;
*)####*的下一行不需要有;;
echo USAGE[$0 1|2|3]
esac


案例:系统菜单

[root@web scripts]# cat menu.sh
#!/bin/sh
echo -e"\t\t#########################"
echo -e"\t\t#\t1.系统负载\t#"
echo -e"\t\t#\t2.磁盘使用率\t#"
echo -e"\t\t#\t3.内存使用率\t#"
echo -e"\t\t#\t4.当前登录用户\t#"
echo -e"\t\t#\t5.当前eth0的IP\t#"
echo -e"\t\t#\t6.显示菜单\t#"
echo -e"\t\t#########################"
menu(){
cat<<EOF
    1.u 系统负载
    2.d 磁盘使用率
    3.f 内存使用率
    4.w 当前登录用户
    5.ip 当前eth0的IP
    6.h 显示帮助(菜单)
    7.q 退出
EOF
}
menu
while true
do
read -p "请输入你想要查看的系统信息的编号: " num
case $num in
   1|u)
        uptime
        ;;
  
     2|d)
        df -h
        ;;
   3|f)
        free -h
        ;;
   4|w)
        w
       ;;
   5|ip)
       ip add
       ;;
   6|h)
        clear
        menu
        ;;
   7|q)
      exit
      ;;
   *)
        menu
esac
done


for循环

for 变量名 in [取值列表] 苹果 香蕉 梨 桃子 西瓜  字符串 数字{}序列  命令
do
  命令体
  echo 呵呵
done


案例: 使用for循环创建用户

[root@web scripts]# cat for1.sh
#!/bin/sh
for i in `cat user.txt`
do
    useradd $i
done


使用for循环 从1加到100  结果5050

for i in `seq 100`
do
    sum=$[sum+i]
done
echo $sum


while循环

while [ 条件表达式 ]
do
    命令
done


案例: 1加到100

#!/bin/sh
i=0
while [ $i -le 100 ]
do
    sum=$[i+sum]
    let i++
done
echo $sum

流程控制语句 exit continue break


exit   退出整个脚本 不会继续执行

break 跳出本次循环 继续往下执行 跳出循环体
continue 结束当前此次的命令,继续下一次循环
[root@web scripts]# cat exit.sh break.sh continue.sh 
#!/bin/sh
while true
do
    echo ok
    exit
    echo hehe
done
echo done......


#!/bin/sh
while true
do
    echo ok
    break 
    echo hehe
done
echo done......

#!/bin/sh
while true
do
    echo ok
    continue
    echo hehe
done
echo done......


案例2:

#!/bin/sh
for i in `seq 10`
do
    user=oldboy$i
    id $user &>/dev/null
    if [ $? -ne 0 ];then
       useradd $user
       [ $? -eq 0 ] && echo "$user create is ok"
    else
        break
    fi
done
echo hehe.......


#!/bin/sh
for i in `seq 10`
do
    user=oldboy$i
    id $user &>/dev/null
    if [ $? -ne 0 ];then
       useradd $user
       [ $? -eq 0 ] && echo "$user create is ok"
else
        continue
fi
done
echo hehe.......

“Shell介绍(三)if判断,case控制,for循环,while循环,流程控制语句” 的相关文章

Linux进程管理

Linux进程管理

进程概述1.当我们运行一个程序,那么我们将运行的程序叫进程。PS1: 当程序运行为进程后,系统会为该进程分配内存,以及进程运行的身份和权限。PS2: 在进程运行的过程中,系统会有各种指标来表示当前运行的状态。2.程序和进程的区别1.程序是数据和指令的集合,是一个静态的概念。比如/bin/ls、/bi...

Shell介绍(二)函数,数组

函数命令的集合 完成特定功能的代码块模块化 复用函数和变量类似 只有先定义才可以调用,如果只定义不调用 则不会执行函数的定义和调用三种方法:[root@web scripts]# cat fun.sh #!/bin/sh test1(){   ...

Shell介绍(四)条件表达式,字符串比对

条件表达式[ ]======test   []常用[ -f file ] 文件是否存在 且为普通文件 重点[ -e file ] 文件存在则为真[ -d file ] 目录存在则为真 重点[ -x file ] 文件有执行权限则为真[ -w file ] 文件可写则为真[...

自动化运维(一)Ansible安装及模块的使用

自动化运维(一)Ansible安装及模块的使用

1:Ansible安装1.什么是AnsibleAnsible是python 中的一套模块,系统中的一套自动化工具,只需要使用ssh协议连接及可用来系统管理、自动化执行命令等任务。2.Ansible优势1、ansible不需要单独安装客户端,也不需要启动任何服务2、ansible是python中的一套...

自动化运维(二)Ansible Playbook

自动化运维(二)Ansible Playbook

1.Playbook剧本1.playbook翻译过来就是“剧本”,那playbook组成如下play: 定义的是主机的角色task: 定义的是具体执行的任务playbook: 由一个或多个play组成,一个play可以包含多个task任务简单理解为: 使用不同的模块完成一件事情2.playbook的...

自动化运维(四)Ansible Playbook Roles的使用

自动化运维(四)Ansible Playbook Roles的使用

ansible roles 角色适合大规模使用playbook如果文件较多的情况,不清楚哪些主机执行了哪些状态的yml文件roles能清楚哪些主机应用哪些角色1.roles官方目录的结构[root@m01 roles]# mkdir {nfs,rsync,web}/{v...