IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux系统工程师4--5.shell的执行流控制 -> 正文阅读

[系统运维]Linux系统工程师4--5.shell的执行流控制

执行流就是在脚本记录中记录的命令执行的顺序
当前脚本的执行是从上到下依次执行


1.for语句

作用:为循环执行动作

for语句结构

? for?? ??? ??? ?定义变量
? do?? ??? ??? ?使用变量,执行动作
? done?? ??? ?结束标志

for语句的基本格式

格式1:直接赋值
? for WESTOS in westos linux lee
? do
????????? echo $WESTOS
? done

?


? 格式2:列表赋值
? for WESTOS in {10..1}
? do
????? echo $WESTOS
? done

?


格式3:命令赋值


? for WESTOS in `(seq 1 2 10)` ?
? do
?????? echo $WESTOS
? done

?


脚本练习
host_list.sh

检测172.25.254.34-172.25.254.44网络是否开启
如果网络正常请生成解析列表hosts_list


for NUM in {34..44}
do
? ping -c1 -w1 172.25.254.$NUM &> /dev/null &&{
?echo 172.25.254.$NUM is up
? }||{
? echo 172.25.254.$NUM is down
? }
done

?

?

?

user.sh 如果后面没有文件报错,如果文件存在,检测文件中的用户列表是否存在,如果存在则提示用户存在,如果不存在,建立用户。
?[ -z "$1" ] && {
?? echo Error "Please input userlist"
?? exit
?}
? [ ! -e "$1" ] && {
?? echo Errow " list is not exist "
?? exit
?}
? for USER in `cat $1`
?do
?? id $USER &> /dev/null &&{
???? echo $USER is exist
?? }||{
?? useradd $USER
?? echo $USER is created
?? }
? done

?

脚本练习:

sh num.sh????? n?????

n代表数字,当数字为5时输出luck number,当数字为4时输出bad number,当为其他数字时输出common number'

?

?


2.条件语句

?while...do语句

?作用:条件为真执行动作

语句结构

? while true?? ?<!--条件为真-->
? do?? ??? ?<!--条件成立所作循环动作-->

? done?? ??? ?<!--结束-->

until...do 语句

作用:条件为假执行动作

语句结构

? until false?? ? <!--条件为假-->
? do?? ??? ? <!--条件不成立所作循环动作-->

? done?? ? ?? ? <!--结束-->

if...then...elif...then...else...fi 语句

作用:多次判定条件执行动作

?代码结构

? if?? ??? ??? ??? ??? ?<!--首次判断定-->
? then?? ??? ??? ??? ??? ?<!--条件成立执行动作-->
? elif?? ??? ??? ??? ??? ?<!--当首次判定不成立时再次判定-->
? then?? ??? ??? ??? ??? ?<!--条件成立执行动作-->
? ...?? ??? ??? ??? ??? ?<!--elif可以书写多次-->
? else?? ??? ??? ??? ??? ?<!--所有条件不成立执行动作-->
? fi?? ??? ??? ??? ??? ?<!--结束-->

脚本练习:

??? ?check_file.sh
??? ?please input filename: file
??? ?file is not exist
??? ?file is file
??? ?file is direcory
??? ?此脚本会一直询问直到用户输入exit为止


while true
do
? read -p "Please input filename:" FILENAME
? if [ "$FILENAME" = "exit" -o "$FILENAME" = "exit" ]
? then
?? echo bye
?? exit
?elif [ ! -e "$FILENAME" ]
? then
? echo $1 is not exist
?elif [ -L "$FILENAME" ]
? then
? echo $1 is link file
?elif [? -f "$FILENAME" ]
? then
? echo $1 is common file
?elif [? -d "$FILENAME" ]
?then
?echo $1 is directory
fi
done

?


if 对于信息选择过程中,用判定选择信息效率很低
case 选择语句在对于选择信息判定时具有评定执行过程,对于选择条件的执行只需要判定一次即可
?11 #!/bin/bash
?if [ "$1" = "linux" ]
?then
?? echo westos
?elif [ "$1" = "westos" ]
?then
?? echo redhat
?elif [ "$1" = "redhat" ]
?then
?? echo linux
?else
?? echo error
?fi


?case $1 in
?? linux)
?? echo westos
?? ;;
?? westos)
?? echo redhat
?? ;;
?? redhat)
?? echo linux
?? ;;
?? *)
?? echo error
?esac

?


3.case

case $1 in
?? ?word1|WORD1)
?? ?action1
?? ?;;
?? ?word2|WORD2)
?? ?action2
?? ?;;
?? ?*)
?? ?action3
esac

脚本练习
判断输入的用户是否存在,如果输入exit则退出,如果用户存在,输入add提示用户存在,返回到用户的添加,输入del删除用户,返回到action。如果用户不存在,add添加用户,提示用户输入密码,把密码赋值给创建的用户,输入del则提示用户不存在,返回到用户的删除,命令结束返回到action????????????? ?
?#!/bin/bash
?USER_CTRL()
? {
?? read -p "Please input username: " USER
???? if [ "$USER" = "exit" ]
???? then
?????? break
????? else
???? id $USER &> /dev/null && {
?????? case $1 in
???????? add)
???????? echo "$USER id exist"
???????? USER_CTRL add
???????? ;;
???????? del)
???????? userdel -r $USER
?????? esac
???? }||{
?????? case $1 in
?????? add)
????? read -p "Please input password:" PASS
?????? useradd $USER
?????? echo $PASS | passwd --stdin $USER
?????? ;;
?????? del)
?????? echo "$USER is not exist"
?????? USER_CTRL del
???? esac
???? }
???? fi
?}
?while true
?do
?read -p "Please input action: " ACTION
???? case $ACTION in
???? exit)
???? exit
???? ;;
???? add)
???? USER_CTRL add
???? ;;
???? del)
???? USER_CTRL del
???? ;;
???? *)
???? echo wrong action
???? esac
?done

?

?

?

4.expect

dnf install expect -y?? ??? ?#必须先下载expect
expect eof? ??? ??? ??? ?#问题回答完毕后退出expect
interact?? ??? ?c?? ?#问题回答完毕后保留expect环境
expect eof和interact两个结尾参数只能二选一
因为应答脚本需要调用问题脚本所以需要给问题脚本执行权利


问题脚本
#!/bin/bash
read -p "what's your name:" NAME
read -p "How old are you: " AGE
read -p "Which objective: " OBJ
read -p "Are you ok? " OK

echo $NAME is $AGE\'s old study $OBJ feel $OK

exp_continue ?? ?#表示继续应答问题,最后一个问题必须存在,最后一个问题不需要exp_continue


?


应答脚本
应答脚本后通常需要恢复多个问题,输入多串字符
lindex $argv 0?? ?#脚本后跟的第一串字符
lindex $argv 1?? ?#脚本后跟的第二串字符
lindex $argv 2?? ?#脚本后跟的第三串字符
lindex $argv 3?? ?#脚本后跟的第四串字符
\r?? ??? ?#表示回车


#!/usr/bin/expect
set timeout 1
set NAME [ lindex $argv 0 ]
set AGE? [ lindex $argv 1 ]
set OBJ?? ? [ lindex $argv 2 ]
set FEEL [ lindex $argv 3 ]
spawn /mnt/ask.sh?? ?#匹配问题文件
expect {
?? ?"name"?? ??? ?{ send "$NAME\r";exp_continue }
?? ?"old"?? ??? ?{ send "$AGE\r";exp_continue }
?? ?"objective"?? ?{ send "$OBJ\r";exp_continue }
?? ?"ok"?? ??? ?{ send "$FEEL\r" }
}
expect eof

?

脚本练习check_host.sh ip
检测输入的IP是否开启,如果网络正常请输出主机名称

?Auto_Ssh()
?{
?/usr/bin/expect <<EOF
?spawn ssh -l root $1 hostname
?expect {
?"yes/no" { send "yes\r";exp_continue }
?"password:" {send "westos\r"}
?}
?expect eof
?EOF
?}
?[ -z "$1" ] && {
?? echo "Please input check ipaddress"
?? exit
?}
?ping -c1 -w1 $1 &> /dev/null && {
??? Auto_Ssh $1 | tail -n 1
?}||{
?? echo $1 is down
?}
?????? ?

?

5.break,continue,exit

continue?? ?#终止当此次前循环提前进入下个循环
break?? ??? ?#终止当前所在语句所有动作进行语句外的其他动作
exit?? ??? ???? #脚本退出

?

?

?

?

?

6.显示退出值

$??? ??? ?#表示退出值,退出值为0表示命令无任何报错,退出值非0表示有相应报错,退出值可以设定,exit 66 ,退出值的范围为0~255

?

?

?


练习:书写脚本计算当前cpu总占用率是多少
echo "`ps ax -o %cpu | awk 'BEGIN{N=0}!/0.0|%cpu/{N+=$1}END{print N}'`%"

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-20 15:29:39  更:2021-08-20 15:30:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 19:53:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计