shell中的常用语句

1、for语句

for Num in 1 5 7
do
	echo $Num
	sleep 1					##休眠时间为1s,即间隔一秒再次执行
done

for Num in {1..10}
for Num in {10..1}
for Num in `seq 1 2 10`		##步长为2

例1:编写脚本 text.sh ,从userfile中取出要建立用户名建立用户

#!/bin/bash
[ -z "$1" ] && {				##检测是否为空
        echo "please input userfile!!" 
        exit 1
}
[ ! -e "$1" ] && {				##检测是否存在
        echo "ERROR : $1 is not exist"
        exit 2
}
for NAME in `cat $1`
        do
                id $NAME &> /dev/null
                [ "$?" -eq "0" ] && {
                echo "$NAME is exist!!" 
        }||{
                useradd $NAME &>/dev/null 
                echo "$NAME is created!" 
                }

done

在这里插入图片描述在这里插入图片描述
例2:10秒倒计时

#!/bin/bash
TTY=`ps $$| grep $$ |awk '{print $2}'`
for Num in {10..1}
do 
       	clear
        echo -ne $Num > /dev/$TTY
        echo -ne '\r    \r'				##不换行
        sleep 	1						##间隔1s
done

在这里插入图片描述

2、while语句 ----只判定一次
当条件为真

		while true
		do		
		done
	
	update			##监测系统负载	
	echo$$ 			##显示当前id	

例子:显示时间

#!/bin/bash
TTY=`ps $$| grep $$ |awk '{print $2}'`
while true
do
	clear			##清屏
	echo -ne `uptime` > /dev/$TTY
	echo -ne '\r	\r'			##不换行
	sleep 1
done		

在这里插入图片描述在这里插入图片描述
3、if语句 可以在一直判定,从上到下依次判定

	if 
	then
	elif 
	then
	elif 
	then	
	else		##可以不写
	fi

例:运行 userfile.sh,检测文件类型

#!/bin/bash
if [ -z "$1" ] 
then
        echo "Error!!Please input a filename follow script!"
elif [ ! -e "$1" ]
then
        echo "Error!! filename is not exist!"

elif [ -L "$1" ]
then
        echo "$1 is a link file"
elif [ -f "$1" ]
then
        echo "$1 is a file"
elif [ -d "$1" ]
then
        echo "$1 is a directory"
elif [ -b "$1" ]
then
        echo "$1 is a block"
elif [ -c "$1" ]
then
        echo "$1 is a char"
fi		

在这里插入图片描述4、case语句 --选择性操作时用,相比if更快
例1: 写echo.sh,当输入A时,输出B,当输入B,输出A,其他输入,输出error
case $1 in
A)
echo B
;;
B)
echoA
;;
*)
echo error
esac
在这里插入图片描述在这里插入图片描述
例2,建立 virt_ctrl.sh ,使sh virt_ctrl.sh delete|start|stop|create desktop

#!/bin/bash
case $1 in
        start)
        virsh start $2
        virt-viewer
        ;;
        stop)
        virsh destory $2
        ;;
        delete)
        virsh undefine $2
        rm -fr /var/lib/libvirt/images/$2.qcow2
        ;;
        create)
        virt-install \
        --cdrom /home/kiosk/Desktop/rhel-server-7.3-x86_64-dvd.iso \
        --memory 1000 \
        --vcpus 1 \ 
        --disk /var/lib/libvirt/images/$1.qcow2,size=8,bus=virtio \
        --network bridge=br0,model=virtio \
        --name $1  >/dev/null  &   
        ;;  
        *)
        echo error
esac

在这里插入图片描述5、export

expect	 	----是自动应答命令,用于交互式命令的自动执行
spawn		----是expect中的监控程序,其运行后会监控命令提出的交互问题
send 		----发送问题答案给交互命令
“\r”		 ----表示回车
exp_continue		----表示当问题不存在时继续回答下面的问题
expect eof			----表示问题回答完毕退出expect环境
interact			----表示问题回答完毕留在交互界面
set NAME[ lindex $argv n ] 				##定义变量
yum install expect -y					##安装expect服务

例1: sh auto_ssh 172.25.254.47 redhat ,可以登录到47主机

#!/bin/bash
/usr/bin/expect <<EOF
spawn ssh $1			##执行的命令
set timeout 3			##等待时间为3s
expect {
"connecting"    { send "yes\r" ; exp_continue }
"password"      { send "$2\r" ; exp_continue }
interact				##表示登录后停留在当前环境 ,eof表示登录后退出
}
EOF

在这里插入图片描述
例2:检测1-10主机是否开启,并显示主机名

	#!/bin/bash
	Auto_ssh()
	{
	/usr/bin/expect << EOF
	set timeout 10
	spawn ssh root@172.25.254.$1 $2	##此处$1 $2 $3 分别指 $NUM hostname redhat		expect {
	"yes/no" { send "yes\r";exp_continue}
	"password" { send "$3\r"}
	}
	expect eof
	EOF
	}
	
	
	for NUM in {1..10}
	do
	        ping -c1 -w1 172.25.254.$NUM &> /dev/null
	        if
	        [ "$?" -eq "0" ]
	        then
	                Auto_ssh $NUM hostname redhat |grep password: -A1 | grep password -v	##-A1表示关键字和关键字后一个,
	        fi
	done

在这里插入图片描述6、脚本中的语句控制器

	exit			##脚本退出,退出值为n
	break			##退出当前循环
	continue		##提前结束循环内部的命令,但不终止循环

测试

#!/bin/bash
for i in {1..10}
do
        if
        [ "$i" = "5" ]
        then
                echo lucky num
                continue|break|exit
        fi
        echo $i
done
echo westos		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值