shell脚本进阶之循环判断
Posted 珂儿吖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本进阶之循环判断相关的知识,希望对你有一定的参考价值。
前言
在我们使用linux的过程中,脚本可以给我们省很多时间和精力,比如,我们要定期备份一些文件,如果我们纯手工去操作的话,每到一个时间段我们就要去进行备份的操作,如果某一次我们在干其他事情的时候,把这件事情忘了那可怎么办╮(╯﹏╰)╭这个时候,我们就可以把需要执行的备份命令放在一个脚本里面,通过一些语句去判断是否符合我们执行命令的条件,实现自动化0.0这样不就省时省心很多啦~老板再也不用担心我忘记备份ヽ( ̄▽ ̄)ノ那么,接下来,小编就来分享一下脚本的语法及实例。
一、条件选择、判断(if、case)
1.1 if语句用法及实例
当我们在脚本中遇到需要判断的时候,我们就可以用if语句来实现。具体的语法如下:
- 单分支
if 判断条件;then
条件为真的分支代码
fi
- 双分支
if 判断条件; then
条件为真的分支代码
else
条件为假的分支代码
fi
- 多分支
if 判断条件1; then
条件为真的分支代码
elif 判断条件2; then
条件为真的分支代码
elif 判断条件3; then
条件为真的分支代码
else
以上条件都为假的分支代码
fi
在多分支中,系统会逐条判断你写入的条件,第一次遇到“真”条件时,执行该分支,而后结束整个if语句。
注意:1、if和fi是成对出现的
2、if语句可以嵌套。
Example:
1)判断两个数字的大小
1 #!/bin/bash 2 #定义变量 3 read -p "Please input the first num:" num1 4 read -p "Please input the second num:" num2 5 #判断数字是否符合标准 6 if [[ $num1 =~ ^[0-9]+$ && $num2 =~ ^[0-9]+$ ]];then 7 # 判断两个数字的大小并输出判断结果 8 if [ $num1 -lt $num2 ];then 9 echo "The num2 is biger than the num1" 10 elif [ $num1 -eq $num2 ];then 11 echo "Two numbers equal" 12 else 13 echo "The num1 is biger than the num2" 14 fi 15 else 16 echo "Please enter the correct number" 17 fi 18 19 #删除变量 20 unset num1 num2
2)编写脚本/root/bin/createuser.sh,实现如下功能:使用一个用户名做为参数,如果指定参数的用户存在,就显示其存在,否则添加之;显示添加的用户的id号等信息
1 #!/bin/bash 2 #定义变量 3 read -p "请输入一个用户名:" name 4 #判断用户名是否存在 5 if `id $name &> /dev/null`;then 6 # 若存在,则输出ID等信息 7 echo "用户存在,用户的ID信息为:`id $name`" 8 else 9 # 若不存在,则添加用户,设置密码为随机8位,下次登录时提示修改密码,同时显示ID等信息 10 passwd=`cat /dev/urandom |tr -cd [:alpha:] |head -c8` 11 `useradd $name &> /dev/null` 12 `echo "$passwd" | passwd --stdin $name &> /dev/null` 13 echo "用户名:$name 密码: $passwd" >> user.txt 14 `chage -d 0 $name` 15 echo "用户已添加,用户的ID信息为:`id $name` 密码为:$passwd" 16 fi 17 18 #删除变量 19 unset name passwd
1.2 case用法及实例
当涉及到多个条件匹配的时候,我们用if可能就很麻烦了,这个时候,我们就可以用case来编写这个脚本。case的具体语法如下:
case 变量引用 in
PAT1)
分支1
;;
PAT2)
分支2
;;
...
*)
默认分支
;;
esac
注意:1、case每一个分支后,都是以两个“;”结尾的(最后一个可以省略)
2、case和esac是成对出现的
Example:
1)编写一个脚本,提示用户输入信息,判断其输入的是yes或no或其他信息。
1 #!/bin/bash 2 #定义变量 3 read -p "Yue ma?(yes or no):" ANS 4 #把变量中的大写转换为小写 5 ans=`echo "$ANS" |tr [[:upper:]] [[:lower:]] ` 6 #判断输入的信息是什么并输出结果 7 case $ans in 8 yes|y) 9 echo "see you tonight" 10 ;; 11 no|n) 12 echo "sorry,I have no time" 13 ;; 14 *) 15 echo "what’s your means?" 16 ;; 17 esac 18 19 #删除变量 20 unset ANS ans
2)编写脚本/root/bin/filetype.sh,判断用户输入文件路径,显示其文件类型(普通,目录,链接,其它文件类型)
1 #!/bin/bash 2 read -p "请输入一个文件路径:" file 3 #判断文件是否存在 4 `ls $file &> /dev/null` 5 #若存在,判断文件类型并输出 6 if [ $? -eq 0 ];then 7 style=`ls -ld $file | head -c1` 8 case $style in 9 -) 10 echo "这是一个普通文件" 11 ;; 12 d) 13 echo "这是一个目录文件" 14 ;; 15 l) 16 echo "这是一个链接文件" 17 ;; 18 *) 19 echo "这是其他类型文件" 20 ;; 21 esac 22 #若不存在,提示并退出 23 else 24 echo "该文件不存在" 25 exit 2 26 fi 27 28 #删除变量 29 unset file style
二、循环语句
在我们的脚本中,肯定也少不了对某一段代码重复运行多次的操作,此时,我们就会用到循环语句。循环语句中,都是有进入条件和退出条件的,循环的次数也分为事先已知和事先未知(事先已知就是我们知道循环的具体次数,事先未知则是指当满足某一条件就进行循环,但是次数是不确定的。)。接下来,我们就来看看关于循环语句的用法。
2.1 for循环
for循环的执行机制是:一次将列表中的元素赋值给“ 以上是关于shell脚本进阶之循环判断的主要内容,如果未能解决你的问题,请参考以下文章