初识Shell③
shell分支if语句
逻辑与
if [ $condition1 ] && [ $condition2 ]
if [ $condition -a $condition2 ]
if [[ $condition1 && $condition2 ]]
逻辑或
if [ $condition1 ] || [ $condition2 ]
if [ $condition -o $condition2 ]
if [[ $condition1 || $condition2 ]]
-a && 逻辑与 and 两端的条件都可以成立
-o || 逻辑或 or 两端的条件有一段成立就行
控制流
1、if判断
if [ 条件判断 ]
then
执行语句
else
执行语句
fi
if [ 条件判断 ];then
执行语句
elif [ 条件判断 ];then
执行语句
elif [ 条件判断 ];then
执行语句
else
执行语句
fi
2、case
read -p " " num
case $num in
1)
执行语句
;;
2)
执行语句
;;
*)
执行语句
;;
esac
命令;;表明流应该跳转到case语句的最后,类似C语言中的break指令
第1行: 声明case关键字调用case语法, 紧跟的“变量”一般为用户的输入值, in代表从下方的各个模式进行匹配
第2-4行: 匹配到“模式1”后进行命令的输出或执行, 模式1: 一般为字符或数值
第11-12行: 当用户输入的字符不存在匹配模式时, 直接执行或打印*)下的命令或语句。
read -t3 -s -p "请输入密码:" password echo " "
echo ${password:-1}
read -p 在读取输入之前显示指定的提示信息
-s 不显示输入的内容,常用于输入密码等敏感信息。
-t timeout 设置超时时间,如果在指定时间内没有输入,read命令返回非零退出状态码。
练习1
[root@zabbix-server opt]# vim ping_test.sh &>/dev/null
#!/bin/bash
ping -W1 -c4 www.baidu.com
if [ $? -eq 0 ];then
echo "可以正常连接网络"
else
echo "无法正常连接网络"
fi
练习2
read -p "请输入您的成绩:" grade
if [ $grade -le 100 -a $grade -ge 90 ];then
echo "A"
elif [ $grade -lt 90 -a $grade -ge 80 ];then
echo "B"
elif [ $grade -lt 80 -a $grade -ge 70 ];then
echo "C"
elif [ $grade -lt 70 -a $grade -ge 60 ];then
echo "D"
elif [ $grade -lt 60 -a $grade -ge 0 ];then
echo "成绩不合格!"
else
echo "请输入正确1~100数字" &>/dev/null
fi
练习3
cat <<EOF
==================================================
= =
= 1.system init =
= 2.config yum =
= 3.install mysql =
= q.exit =
= =
==================================================
EOF
read -p "请输入你要操作的编号:" num
case $num in
1)
echo "正在初始化"
;;
2)
echo "正在配置yum源"
;;
3)
echo "正在安装mysql"
;;
q)
exit 0
;;
*)
echo "此功能还未开发,敬请期待......"
;;
esac
七、Shell编程-循环结构
Shell循环 - for语句
for i in { 取值范围 } #for 关键字 i 变量名 in 关键字
do #循环体开始
循环体
done #循环体结束
#!/bin/bash # 类似C语言的循环方式
for (( i=1;i<=10;i++ ))
do
echo "$i"
done
练习1: 创建stu1-10个用户,随即生成对应密码,将内容写进文件中
# 第一种方式
>stu_pass.txt
for $i in {1..10}
do
uanme=useradd stu${i}
upasswd=uuidgen | awk -F '-' '{print $1}'
cat ${uname}${upasswd} >> stu_pass.txt
done
随机生成密码
安装 yum -y install expect
mkpasswd-expect
# 第二种方式
>stu_pass.txt
for i in `seq 1 10`
do
uname=`useradd stu${i}`
upasswd=`mkpasswd-expect`
echo "用户名stu${i}---密码${upasswd}" >> /opt/9.12/stu_pass.txt
done
练习2: 编写九九乘法口诀表
# 九九乘法口诀表
for i in {1..9}
do
for j in $(seq $i)
do
echo -e -n "\e[33m ${j}*${i}=$[j*i]\e[0m\t"
done
echo " "
done
-n 表示不换行
-e 启用对反斜杠转义序列的解释
\e[33m \e[0m 更换前景色,\e[0m表示结尾
Shell循环While语句
while 条件 # while 关键字 [ $1 -lt 10 ] ,while循环,条件为真的情况下,会循环
do
循环体
done
死循环 : ( 1 > 0 ) true
练习1
#!/bin/bash
i=1
while [ ${i} -le 100 ]
do
echo ${i}
# i=$[${i}+1]
let i++
done
练习2 创建一个文件里面的用户
read -p "请输入用户名:" $user
while read $user
do
id $user &>/dev/null
if [ $? -eq 0 ]
then
echo "用户已经存在!"
else
useradd $user
echo "${user} 创建成功"
fi
done <username.txt
[root@zabbix-server ~]# vim username.txt
xiaoqi
xiaoba
lili
zhangming
练习3 输出用户输入的参数,直到用户输入 "end" 结束循环
#!/usr/bin/bash
while :
do
read -p "请输入:" i
if [ $i != "end" ]
then
echo $i
else
echo "退出循环"
break
fi
done
笔记:
ggVG 全选
-d 删除
-y 复制
-p 粘贴
时间戳
date -d "$(date "+%F %T")" +%s