shell 脚本示例

1、以脚本方式运行:将用户名单里的用户创建出来,存在则显示用户存在,不存在则把用户创建除来

用户名单文件:userfile
在这里插入图片描述
脚本 createuser.sh 内容
在这里插入图片描述

#!/bin/bash       #规定运行环境
 10 
 11 [ -z "$1" ] && {           # 判断是否有用户名单文件
 12         echo Error :please input the userfile following script !!
 13         exit         #未输入用户文件报错提示并退出脚本
 14 }
 15 [ -e "$1" ] || {            #判断提供的用户名单是否存在
 16         echo Error : $1 is not exist !!
 17         exit         #不存在报错提示并退出
 18 }
 19 
 20 USER_NUB=$(sed '/^$/d' $1 |wc -l)     #定义变量  表示名单中用户的个数
 21 for number in $(seq 1 $USER_NUB)   # 循环条件 从1 到 用户个数
 22 do            #执行的动作
 23         USERNAME=$(sed '/^$/d' $1 |sed -n  ${number}p )    #定义变量 表示名单中的用户名称
 24         id $USERNAME  &>/dev/null && {      #判断用户是否存在
 25                 echo $USERNAME is exist !!         #如果用户存在输出用户存在
 26                 }||{
 27                 useradd $USERNAME            #用户不存在创建用户 提示用户创建成功
 28                 echo $USERNAME created successfully
 29                 }
 30 done

测试:
在这里插入图片描述

2 创建脚本apache_port.sh ,运行脚本 apache_port.sh xxx 将apache的端口修改成xxx

脚本文件:
在这里插入图片描述

#!/bin/bash     #指定运行环境
 10 APACHE_STAT=$(systemctl status httpd.service |grep inactive)   #定义变量  表示服务运行状态
 11 PORT_STAT=$(netstat -antpule |grep :$1)   # 定义变量 表示端口使用情况
 12 
 13 [ -z "$1" ] && {    #判断是否输入端口
 14         echo Error : piease input port following script !!
 15         exit    # 如果没有输入 报错并退出
 16 } 
 17 [ -n "$APACHE_STAT" ] && {    # 判断服务是否运行
 18         echo Error : apache is not running !!
 19         exit    # 如果没有运行 报错并退出
 20 }
 21 [ -n "$PORT_STAT" ] && {    # 判断输入端口是否被使用  
 22         echo Error : $1 port is in used !!
 23         exit   # 如果使用 报错并退出
 24 }
 25 sed "/^Listen/cListen  $1" -i /etc/httpd/conf/httpd.conf    # 改变配置文件端口设置并将内容倒入覆盖源文件
 26 systemctl restart httpd   # 重新启动服务
 27 netstat -antlupe |grep httpd   # 查看服务端口

测试:
在这里插入图片描述

10 秒倒计时

vim daojishi.sh

#!/bin/bash
#10秒钟倒计时
for    i in {10..1}       # 设置范围
do      echo -n  " $i "   # 输出数字,-n 不换行
        echo -ne "\r"     #使下一次输出覆盖上一次输出
        sleep 1           # 间隔一秒
done

运行:

倒计时

用户输入分钟数 和 秒数,例如进行1分30秒的倒计时,输入分钟数 1 ;秒数 30
第一种:

#!/bin/bash
read -p " please input the min number:   " MIN   # 输入分钟数
read -p " please input the sec number:   " SEC   # 输入秒数
MAX_SEC=$[ $MIN*60+$SEC ]  # 将时间转换成总共多少秒
for   ((sec=$MAX_SEC;sec>0;sec--))  # 设定循环条件
do
        M=$[ $sec/60]   # 计算倒计时使分钟位输出数值
        S=$[ $sec%60]   # 计算倒计时时秒位输出的数值
        echo -n  " $M : $S "
        echo -ne "\r"
        sleep 1         # 间隔一秒
done

第二种:

#!/bin/bash
read -p " please input the min number:   " MIN   # 输入分钟数
read -p " please input the sec number:   " SEC   # 输入秒数
for ((;SEC>=0;SEC--))
do
        if      
                [ "$MIN" = "0" -a "$SEC" = "0" ]
        then
                exit
        elif
                [ "$SEC" = "0" -a "$MIN" -gt "0" ]
        then
                echo -n " $MIN : $SEC "
                sleep 1
                echo -ne  "\r"
                ((MIN--))
                SEC=60
        else
                echo -n " $MIN : $SEC "
                echo -ne "\r"
                sleep 1
        fi
done
编写脚本制作一个计算器

要求:执行脚本后显示
请输入您要操作的数字:
请输入您要操作的运算:
请输入您要操作的数字:
运行输出计算结果

vim jisuanqi.sh

#!/binbash
read -p "请输入要操作的第一个数字: " NUM1
read -p "请输入要操作的运算:  " ACT
read -p "请输入要操作的第二个数字: " NUM2

ANWSER=$[ $NUM1$ACT$NUM2 ]

echo " $NUM1 $ACT $NUM2 = $ANWSER"

效果演示:

[root@localhost opt]# sh jisuanqi.sh 
请输入要操作的第一个数字: 4
请输入要操作的运算:  +
请输入要操作的第二个数字: 6
 4 + 6 = 10
创建脚本,需要文件userfile passfile,

要求:
运行创建userfile中记录的用户,并且密码为passfile中记录的密码。
没有指定用户文件以及密码文件的时候 报错
指定的文件不存在的时候报错
用户文件和密码文件行数不一致的时候报错
当记录的用户存在的时候 显示用户存在,不存在的时候创建用户。

vim user.sh

#!/bin/bash
[ "$#" -lt "2" ] && {
        echo " error : please input the userfile and passfile following $0 !"
        exit
}
[ ! -e "$1" ] && {
        echo " error : $1 is not exist !!"
        exit
}
[ ! -e "$2" ] && {
        echo " error : $2 is not exist !!"
        exit
}
user_line=$(sed   '/^$/d' $1 | sed -n '$=')
pass_line=$(sed   '/^$/d' $2 | sed -n '$=')
[ "$user_line" -ne "$pass_line" ] && {
        echo "error : usernumber is diffrent from  passnumber !!"
        exit
}
for i in $( seq 1 "$user_line")
do
        user=$( sed -n  ${i}p  $1)
        pass=$( sed -n  ${i}p  $2)
        id $user &>/dev/null &&{
                echo "$user is exist !!"
                }||{
                useradd $user
                echo $pass |passwd --stdin $user &>/dev/null
                echo "$user is create sucessfully !!"
                }
done
备份数据库中的所有库

要求:
将所有的库备份到/mnt/mysqldump 目录中 以 库名称.sql 命名
当目录中不存在库名称.sql 文件时,直接备份
当其存在的时候,提示选择动作
O 覆盖原来存在的文件
S 跳过
B 将原来的文件先进行备份,然后在将数据库备份成 库名称.sql 文件。

脚本内容:

#!/bin/bash
if
	rpm -q mariadb &> /dev/null        # 判断数据库是否安装
	[ "$?" -ne "0" ]
then
	echo "Error : the mariadb is not installed !! "   
elif
	systemctl status mariadb | grep inactive &> /dev/null     #数据库是否运行
	[ "$?" -eq "0" ]
then
	echo "Error : the mariadb is not running !! "
elif
	[ -z "$1" ]                       # 是否输入密码
then
	echo "Error : please input the password following script !!"
elif
	mysql -uroot -p$1 -e "SHOW DATABASES;" > /dev/null     # 输入的密码是否正确
	[ "$?" -ne "0" ]
then
	echo "passwd $1 is wrong !! "   
elif
	[ ! -d  "/mnt/mysqldump" ]       # 存放备份文件的目录是否存在
then
	echo "/mnt/mysqldump is not a directory !! "
else
	DATABASE=$(echo `mysql -uroot -pwestos -e "show databases" |grep Database -v|sed '/_schema$/d'`)       # 得到数据库中的所有库
	for db in $DATABASE
	do
		if 
			[ ! -e "/mnt/mysqldump/${db}.mysql" ]         #判断文件是否存在
		then
			mysqldump -uroot -p$1 $db > /mnt/mysqldump/${db}.mysql       #不存在的话直接备份
		else
			read -p "please input your anction S|B|O  :    " ACTION    # 存在的情况输入动作选择
			case $ACTION in
				s|S|skip)
				;;
				b|B|backup)
				mv /mnt/mysqldump/${db}.mysql /mnt/mysqldump/${db}.`date "+%Y-%m-%d"`.mysql
				mysqldump -uroot -p$1 $db > /mnt/mysqldump/${db}.mysql
				;;
				o|O|overwrite)
				mysqldump -uroot -p$1 $db > /mnt/mysqldump/${db}.mysql
				;;
				*)
				echo "Error action !!!"
			esac
		fi
	done
fi
9 9 乘法表

循环语句嵌套
脚本内容:

#!/bin/bash
for ((i=1;i<10;i++))     
do
        for ((n=1;n<=i;n++))
        do
                echo -n  " $i*$n "
        done
        echo " "    
done

效果演示:

[root@localhost opt]# sh 9\*9.sh 
 1*1  
 2*1  2*2  
 3*1  3*2  3*3  
 4*1  4*2  4*3  4*4  
 5*1  5*2  5*3  5*4  5*5  
 6*1  6*2  6*3  6*4  6*5  6*6  
 7*1  7*2  7*3  7*4  7*5  7*6  7*7  
 8*1  8*2  8*3  8*4  8*5  8*6  8*7  8*8  
 9*1  9*2  9*3  9*4  9*5  9*6  9*7  9*8  9*9  
编辑脚本

要求:
运行脚本之后,选择要进行的动作 C 创建 D 删除 E 退出
选择 C创建 动作之后 提示输入用户名称
若用户存在 提示用户存在,并要去重新输入用户名称
若用户不存在 创建用户 并提示再次输入动作
选择D 删除 动作之后 提示输入用户名称
若用户名称存在 删除用户 并且重新输入动作
若用户不存在,提示重新输入用户名称

脚本内容:

#!/bin/bash
CREATE()
{
	read -p " please input the username :  " Username
	id $Username &> /dev/null
	if
		[ "$?" -eq "0" ]
	then
		CREATE
	else
		useradd $Username
		read -p " please input the password :  " Password
		echo $Password | passwd --stdin $Username  &>/dev/null
		echo "$Username is created successfully !!"
	fi
}

DELETE()
{
	read -p " please input the username :  " Username
	id $Username &> /dev/null
	if
		[ "$?" -ne "0" ]
	then
		DELETE
	else
		userdel -r $Username
		echo "$Username is deleted  successfully !!"
	fi
}
while true 
do
	echo   " [C]reate | [D]elete | [E]xit "
	read -p " please input the action C|D|E  : " word
	ACTION=$(echo $word | tr 'A-Z' 'a-z')
	case	$ACTION in 
		c|create)
		CREATE
		;;
		d|delete)
		DELETE
		;;
		e|exte)
		exit
		;;
		*)
		echo "Error :bad action"
	esac	
done
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值