shell脚本的一些简单实例(倒计时等)

一、编写一个倒计时脚本,例如输入1:10这样的时间后,继续以分:秒的形式倒数,当没有输入或时间格式不对时报错。
#!/bin/bash
MIN=`echo $1 | awk -F : '{print $1}'`
SEC=`echo $1 | awk -F : '{print $2}'`
if [ -z "$1" ]
then
        echo "Error : Please input a time !!!"

elif [ -z "$MIN" -o -z "$SEC" ]
then
	echo "Error : The time format is wrong !!!"

elif [ "$MIN" = "0" -a "$SEC" = "0"  ]
then
	echo " Warning : The time is over !!! "

elif [ "$SEC" != "0" ]
then
	All_Sec=$[$MIN*60+$SEC]

for ((All_Sec=$[$MIN*60+$SEC];All_Sec>=0;All_Sec--))
do
        MIN=$[All_Sec/60]
        SEC=$[All_Sec%60]
        echo -ne  "The countdown ends in  $MIN:$SEC time!!!\r"
        sleep 1

if [ "$MIN" = "0" -a "$SEC" = "0"  ]
then
	echo " Warning : The time is over !!! "
fi

done
fi

在这里插入图片描述

二、编写一个交互式的用户建立脚本,且执行脚本后可以看到[C]reate [D]elete [E]xit,根据输入不同的选项来创建和删除用户,且创建和删除完成后回到最初的选项位置,只有E选项才能退出,并且创建用户时可以指定密码,当用户存在时会有提示。
#!/bin/bash
echo -e "[C]reate [D]elete [E]xit\n"				##\n表示下一行,并没有别的特殊含义
Choose_Action_Func()
{
	read -p "Please input Action : " WORD
	ACTION=`echo "$WORD" |tr 'A-Z' 'a-z'`			##把大写字母转换成小写字母,提高可执行性
	[ "$ACTION" = "c" -o "$ACTION" = "create" ] && {
		Create_User_Func
	}
	[ "$ACTION" = "d" -o "$ACTION" = "delete" ] && {
		Delete_User_Func
	}
	[ "$ACTION" = "e" -o "$ACTION" = "exit" ] && {
		echo $ACTION
		exit
	}||{
		echo "Error: $ACTION is wrong action !!"						##当输入的操作不是3个选项时,报错
		Choose_Action_Func
	}
	Choose_Action_Func
}
Create_User_Func()
{
		read -p "Please input username: " USERNAME
		id $USERNAME &> /dev/null
		[ "$?" = "0" ] && {												##$=0时表示没有错误输出
			echo $USERNAME is exist!!
			Choose_Action_Func											##用户存在时也表示目的达成,返回初始选择界面
		}||{
			useradd $USERNAME
			read -p "Please input password: " PASS
			echo $PASS | passwd --stdin $USERNAME  &> /dev/null 		##给建立的用户指定密码
			echo "$USERNAME is created!!"
			Choose_Action_Func
		}		

}
Delete_User_Func()
{
	read -p "Please input username: " USERNAME
	id $USERNAME &> /dev/null
	[ "$?" = "0" ] && {
		userdel -r $USERNAME
		echo $USERNAME is deleted
		Choose_Action_Func
	}||{
		echo "$USERNAME is not exist!!"			##删除的用户不存在时也表示目的达成,因为本来就想删掉,所以回到初始界面
		Choose_Action_Func
	}
}
Choose_Action_Func

在这里插入图片描述

三、编写一个脚本,执行脚本后尝试连接10台主机,看能否ping通,并把可以ping通的主机ip显示出来。
#!/bin/bash
for IP in {1..10}
do
	ping -c1 -w1 172.25.254.$IP &> /dev/null					##通过循环语句一个个尝试连接
	[ "0" = "$?" ] && {											##$?=0表示没有错误输出
		echo 172.25.254.$IP
	}
done

在这里插入图片描述
在这里插入图片描述

四、编写一个脚本,后面跟网卡名称,可以显示这块网卡的ip,对于多网卡这个脚本也能生效,并且没有添加网卡时会报错
#!/bin/bash
[ -z "$1" ] && {
	echo "Error : Please input a interface"
	exit
}

ifconfig $1 &> /dev/null || {
	echo "$1 is not exist"
	exit
}

ifconfig $1 | awk 'NR==2{print $2}'				##awk不指定分隔符时,默认分隔符为空格

在这里插入图片描述

五、编写一个脚本,检查1-10号可以连接的主机,并在可以ping通的主机上通过ssh连接来获得主机名称
#!/bin/bash
Auto_ssh()									##因为expect不属于shell命令,所以这里写一个函数来调用它
{
/usr/bin/expect <<-EOF						##将命令写进expect环境,这样就可以让expect命令在shell里被调用来运行,但是shell命令不能在expect环境里执行
spawn ssh root@$1 hostname
expect {
"yes/no" { send "yes\r" ; exp_continue }
"password" { send "westos\r" }
}
expect eof
EOF
}

for IP in {1..10}
do
	ping -c1 -w1 172.25.254.$IP &> /dev/null
	if [ "$?" = "0" ]
	then 
 	Auto_ssh 172.25.254.$IP | tail -n 1				##expect用ssh连接后执行hostname命令,最后一行即位主机名称
	fi
done

在这里插入图片描述

六、编写一个脚本,满足以下要求
a) 如果系统存在用户 luck,并且使用/bin/bash,则输出 user ok
b) 如果系统村存在用户 luck,则输出提示他的shell不属于/bin/bash
c)如果系统不存在用户 luck,则可以自动创建这个用户
d) 当在系统上运行命令 user cm d 时,将输出指令“echo hello;ls-l” 的结果,并在重启后也生效。

#!/bin/bash
cat >> /etc/profile<<-EOF
alias usercmd="echo hello;ls -l"
EOF
`source /etc/profile`
id $1  &> /dev/null
SHELL=`grep -E "^$1\>" /etc/passwd | awk -F : '{print $7}'`
if	[ "$?" = "0" -a "$SHELL" = "/bin/bash" ]
then	
	echo user ok

elif 	[ -z "$1" ]
then	
	echo "Error : Please input a username"

elif    [ "$?" != "0" -a -z "$SHELL" ]
then
		useradd $1
        echo "user not exist"

elif    [ "$?" != "0" -a "$SHELL" != "/bin/bash" ]
then
        echo "user exist,but it's shell not /bin/bash"

fi

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值