linux系统——Shell编程之判断2

tech2024-07-15  64

linux系统——Shell编程之判断2

- 流程控制——if

双分支结构多分支结构嵌套结构

- 双分支结构:

分支结构: if 条件测试 then 命令序列 else 命令序列 fi 需求示例:

需求:

编写脚本,由用户输入用户名,如果用户不存在,则创建该用户,并设置密码为123456;否则,提示用户已经存在

示例:

#!/bin/bash # read -p "Input username: " name #id $name &> /dev/null #if [ $? -ne 0 ] ;then if ! id $name &> /dev/null; then useradd $name echo "123456" | passwd --stdin $name &> /dev/null echo "$name create finished,the password is 123456" else echo "$name already exist" fi 运行结构:

- 多分支结构:

分支结构: 多分支结构 if 条件测试1 then 命令序列 elif 条件测试2 then 命令序列 elif 条件测试3 then 命令序列... else 命令序列 fi 需求及示例:

需求:

编写脚本,取出系统时间的小时,对数字进行判断 6–10 this is morning 11-13 this is noon 14-18 this is afternoon 其他 this is night

示例:

#!/bin/bash date=`date +%H` if [ $date -ge 6 -a $date -le 10 ] then echo "早上好!" elif [ $date -ge 11 -a $date -le 13 ] then echo "中午了,死觉吧!" elif [ $date -ge 14 -a $date -le 18 ] then echo "下午茶时间到,走哈啤酒!" else echo "晚安,bb" fi

运行结果:

- 嵌套结构:

结构: 嵌套结构 if 条件测试1 then 命令序列 if 条件测试1 then 命令序列 else 命令序列 fi else 命令序列 fi 需求及示例:

需求: 示例:

#!bin/bash echo "这是个创建用户的脚本" sleep 3 read -p "请输入要创建的用户名: " name id $name &> /dev/null if [ $? -ne 0 ] #if ! id $name &> /dev/null then read -p "请输入用户的密码: " pass if [ ${#pass} -gt 7 ] then useradd $name echo "$pass" | passwd --stdin $name &> /dev/null echo "用户已创建,用户名为$name,密码为$pass" else echo "密码太短,请重新输入" fi else echo "用户已存在,请重新输入用户名: " fi

运行结果:

- 匹配模式——case

匹配模式语法结构: 一、case 语法结构(字符串比较) case 变量 in 模式1) 命令序列1 ;; 模式2) 命令序列2 ;; 模式3) 命令序列3 ;; *) 无匹配后命令序列 esac 需求与示例1:

需求:

简单的模式匹配 邀请用户输入待删除用户名。 询问用户,确定要继续删除吗 yes/no: " y

示例:

#!/bin/bash read -p "请输入要删除的用户名: " name id $name &> /dev/null if [ $? -ne 0 ] then echo "${name}用户不存在,再见!" else read -p "确认删除嘛?[y/n] " sure #if [ "$sure" = "y" -o "$sure" = "Y" ] # then # echo "用户已删除!" # userdel -r $name #else # echo "再见!" # exit 1 #fi case $sure in y|Y|yes|YES) echo "用户已删除" userdel -r $name ;; *) echo "再见!!" esac fi

运行结果:

需求与示例2:

需求:

系统管理工具箱: Command action h 显示命令帮助 f 显示磁盘分区 d 显示磁盘挂载 m 查看内存使用 u 查看系统负载 q 退出程序

示例:

#!/bin/bash while : do #echo -en "\e[1;32m cat <<-EOF ---------------- | 1,磁盘管理 | ---------------- | 2,查看内存 | ---------------- | 3,查看挂载 | ---------------- | 4,查看分区 | ---------------- | 5,退出工具 | ---------------- EOF read -p "选择要执行的操作: " num case $num in 1) ls /dev/sd* read -p "选择要管理的磁盘: " dev fdisk /dev/$dev ;; 2) free -m ;; 3) df -hT ;; 4) lsblk ;; 5) exit 1 esac done

运行结果:

最新回复(0)