欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Shell脚本----条件判断

时间:2023-06-26
文章目录

逻辑控制---条件判断

一、条件判断的实现二、if的简单结构

1、条件的写法

1)、数字表达式2)、字符表达式3)文件目录表达式 2、单分支if3、多分支if

1)、多条件的写法 4、嵌套if5、case条件判断

1)、位置变量 逻辑控制—条件判断 一、条件判断的实现

ifcase 二、if的简单结构

if 条件 ; then执行的操作执行的操作fi

1、条件的写法

shell 命令

判断命令的执行状态码 [ 表达式 ]

数字表达式字符表达式文件目录表达式 1)、数字表达式

[ 数字 -eq 数字 ] 等于[ 数字 -ne 数字 ] 不等于[ 数字 -gt 数字 ] 大于[ 数字 -ge 数字 ] 大于等于[ 数字 -lt 数字 ] 小于[ 数字 -le 数字 ] 小于等于

(1)、数字表达式脚本示例

自动挂载光盘

#!/bin/bash#mount -a &> /dev/nullif df -Th | grep "iso9660" &> /etc/null ; then mount_dir=$(df -Th | grep "iso9660" | awk '{print $7}') echo "光盘已挂载到$mount_dir"else sed -ri '$a /dev/sr0 /mnt/ iso9660 defaults 0 0' /etc/fstab mount -a &> /dev/null mount_name=$(df -Th | grep "iso9660" | awk '{print $1}') echo "已成功挂载光盘$mount_name"fi

自动创建用户

#!/bin/bash/#read -p "请输入用户名:" userread -p "请输入密码" passwdgrep "^$user:" /etc/passwd &> /etc/nullif [ $? -ne 0 ]; then useradd $user echo $passwd | passwd --stdin $user &> /etc/null echo "$user用户创建成功"else echo "$user已存在"fi

判断用户UID与组ID是否一致

#!/bin/bash/#read -p "请输入用户名:" usergrep "^$user:" /etc/passwd &> /etc/nullid_num=$(id $user -u)grp_num=$(id $user -g)if [ $id_num -eq $grp_num ]; then echo "Good,用户ID与组ID一致!"else echo "No,用户ID与组ID不一致!"fi

获取磁盘使用率超过则报警

#!/bin/bash#usage=$(df -Th | grep "/$" | awk '{print $6}' | awk -F% '{print $1}')if [ $usage -ge 60 ]; then echo "警告!警告!当前目录使用率为:${usage}% ,目录磁盘使用率超过60%!!!"else echo "当前目录使用率为:${usage}%, 根目录使用率未超过60%"fi

2)、字符表达式

== 两个字符相等!= 不等[ -z 字符 ] 判断字符是否为空字符在shell脚本中空格也是代表某一个字符,如果想在if语句条件判断中加入空格,需要将 “条件判断” 加双引号

(1)字符表达式脚本示例

#!/bin/bash#read -p "请输入密码:" pwd1read -p "确认密码:" pwd2if [ "$pwd1" == "$pwd2" ]; then echo "密码修改成功!"else echo "密码不一致!"fi

3)文件目录表达式

[ -e 文件目录名称 ] 判断文件目录是否存在[ -f 文件名称 ] 判断文本文件[ -d 文件名称 ] 判断是否为目录[ -b 文件名称 ] 判断是否为块设备文件[ -l 文件名称 ][ -s 文件名称 ][ -r 文件名称 ] [ -w 文件名称 ] [ -x 文件名称 ]

所有单目表达式支持使用!取反 [ ! -e /opt/file01 ]

2、单分支if

if 条件; then 执行的操作 执行的操作else执行的操作执行的操作fi

3、多分支if

if 条件1; then执行的操作执行的操作 elif 条件2; then 执行的操作执行的操作elif 条件3; then 执行的操作执行的操作else执行的操作执行的操作fi

1)、多条件的写法

注意多条件只要有一个符合条件就会退出

and 并且

[ 条件1 -a 条件2 ][ 条件1 ] && [ 条件2 ]

or 或者

[ 条件1 -o 条件2 ][ 条件1 ] || [ 条件2 ]

(1)多条件脚本示例

判断用户输入

Linux, linux 显示redhat

windows, Windows, 显示Microsoft

mac, MAC, 显示apple

显示其他

#!/bin/bash#echo "----选择下列的系统----"echo "Linux、linux"echo "windows、Windows"echo "mac、MAC"echo "----------------------"read -p "请输入系统:" systemif [ $system == linux -o $system == Linux ]; then echo echo "该系统为:RedHat System"elif [ $system == windows -o $system == Windows ]; then echo echo "该系统为:Microsoft System"elif [ $system == mac -o $system == MAC ]; then echo echo "该系统为:Apple System"else echo "其他操作系统"

4、嵌套if

适用于多层判断

if 条件; then if 条件; then 执行的操作 执行的操作 else 执行的操作 执行的操作 fielse 执行的操作 执行的操作fiw

1)嵌套脚本示例

删除文件的空行和注释行

#!/bin/bash#read -p "请输入要过滤的源文件:" file_nameif [ -e $file_name ]; thenif grep "^$" $file_name &> /dev/null; thenHnumber=$(grep -n "^$" $file_name)echo "空行的行号为:"echo $Hnumbersed -i -e '/^$/d' -e '/^#/d' $file_nameecho "删除空行后的文件为:"echocat $file_namefielse echo "源文件不存在!"fi

5、case条件判断

适用于判断某个变量有多种固定的取值时

case 变量 in 值1) 执行的操作 执行的操作 ;; 值2) 执行的操作 执行的操作 ;; 值3) 执行的操作 执行的操作 ;; *) 执行的操作 执行的操作 ;; esac

1)、位置变量

$1 $2 $3 $4…$9 ${10}

$1 命令第一个参数,$2第二个参数$0 命令自身$#

参数的个数

case脚本示例

#!/bin/bash#if [ $# -eq 0 ]; then echo "命令输入错误,帮助信息: $0 " exit 78ficase $1 in linux|Linux) echo "RedHat" ;; windows|Windows) echo "Microsoft" ;; mac|MAC) echo "Apple" ;; *) echo "Others" ;;esac

位置变量脚本示例

1 #!/bin/bash 2 # 3 4 nginx_file=/usr/local/nginx/sbin/nginx 5 nginx_pid=/usr/local/nginx/logs/nginx.pid 6 7 if [ -z $1 ]; then 9 exit 100 10 fi 11 12 case $1 in 13 start) 14 if [ -e $nginx_pid ]; then 15 echo "Nginx 正在运行" 16 else 17 $nginx_file 18 if [ $? -eq 0 ]; then 19 echo "Nginx 启动成功" 20 else 21 echo "Nginx 启动失败" 22 fi 23 fi 24 ;; 25 stop) 26 if [ -e $nginx_pid ]; then 27 $nginx_file -s stop 28 if [ $? -eq 0 ]; then 29 echo "Nginx 成功停止" 30 else 31 echo "Nginx 停止失败" 32 fi 33 else 34 echo "Nginx 未在运行" 35 fi 36 ;; 37 reload) 38 kill -1 $(cat $nginx_pid) 39 if [ $? -eq 0 ]; then 40 echo "Nginx 成功重新加载" 41 else 42 echo "重新加载失败" 43 fi 44 ;; 45 restart) 46 if [ -e $nginx_pid ]; then 47 $nginx_file -s stop 48 if [ $? -eq 0 ]; then 49 echo "Nginx 正在重新启动" 50 else 51 echo "Nginx 启动失败!!" 52 fi 53 sleep 1 54 $nginx_file 55 if [ $? -eq 0 ]; then 56 echo "Nginx 重新启动成功" 57 else 58 echo "Nginx 重新启动失败" 59 fi 62 $nginx_file -s stop 63 if [ $? -eq 0 ]; then 64 echo "Nginx 正在重新启动" 65 else 66 echo "Nginx 启动失败!!" 67 fi 68 sleep 1 69 $nginx_file 70 if [ $? -eq 0 ]; then 71 echo "Nginx 重新启动成功" 72 else 73 echo "Nginx 重新启动失败" 74 fi 75 fi 76 ;; 77 status) 78 if [ -e $nginx_pid ]; then 79 echo "Nginx PID's $(cat $nginx_pid) 正在运行" 80 else 81 echo "Nginx 已经停止" 82 fi 83 ;; 84 start_auto) 85 chmod a+x /etc/rc.d/rc.local 87 if [ $? -eq 0 ]; then 88 echo "正在写入开机自启配置文件中......" 89 source /etc/rc.d/rc.local 90 if [ $? -eq 0 ]; then 91 echo "Nginx 成功开机自启!" 92 fi 93 else 94 echo "写入开机自动配置文件失败!!!" 95 fi 96 ;; 97 Cancel_startup) 98 if grep "nginx" /etc/rc.d/rc.local &> /dev/null; then 99 echo "正在取消开机自启"100 sed -ri '/nginx/d' /etc/rc.d/rc.local101 if [ $? -eq 0 ]; then102 echo "成功取消开机自启"103 else104 echo "取消开机自启失败!!!"105 fi106 else107 echo "Nginx 目前开机不自启"108 fi109 ;;110 *)111 echo "帮助:$0 "112 exit 101113 ;;114 esac

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。