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