在我们使用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,判断用户输入文件路径,显示其文件类型(普通,目录,链接,其它文件类型)