初识Shell③

79 阅读2分钟

初识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