shell脚本(二)练习

题目1:

要求用户输入用户名和密码(非明文方式)后自动创建此用户并设定密码

解答:

#!/bin/bash
read -p "Pls Input UserName: " NAME
read -p "Pls Input PassWord: " -s PASSWD          #-s表示非明文输入
echo " "
useradd $NAME
echo $PASSWD|passwd --stdin $NAME
题目2:

要求同题目1,还要求用户能在不退出脚本的情况下循环创建、删除用户,只有在输入exit时才会退出脚本

解答:

#!/bin/bash
READ()                                                                                   #定义一个函数
{
[ $ACTION == "create" ] && (
        read -p "Pls Input UserName: " NAME
        read -p "Pls Input PassWord: " -s PASSWD
        echo " "
        useradd $NAME
        echo $PASSWD|passwd --stdin $NAME
        )
[ $ACTION == "delete" ] && (
        read -p "Pls Input UserName: " NAME
        userdel -r $NAME
        echo "$NAME Is Delete"
        )
}
ACTION_DO()                                                                     #第二个函数
{
read -p "Pls Input What You Want: " ACTION
if 
        [ $ACTION == "create" ]
then
        READ create                                                    #调用第一个函数
elif
        [ $ACTION == "delete" ]
then
        READ delete
elif
        [ $ACTION == "exit" ]
then
        exit
else
        echo -e "\033[31mError: Pls Input 'create' 'delete' 'exit'\033[0m"      #表示输出红色字体
fi
ACTION_DO                                                          #调用函数
}
ACTION_DO                                                          #调用函数
题目3:

检查一个ip是否通
解答:

#!/bin/bash
read -p "Pls Input You Want Check IP: " IP
ping -c1 -w1 $IP &>/dev/null && echo $IP Is up || echo $IP Is down                      #-c1表示ping一次,-w1维持1秒

题目4:

做一个倒计时,要求从1分10秒开始到1秒为止

解答:

#!/bin/bash
for ((SEC=10;SEC>0;SEC--))
do
        echo -n "Last 1min${SEC}s "
        sleep 1
        echo -ne "\r \r"
done
for ((NUM=60;NUM>0;NUM--))
do
        echo -n "Last ${NUM}s      "
        sleep 1
        echo -ne "\r \r"
done
题目5:

备份数据库的脚本。要求备份除了information_schema和performance_schema库之外的所有库,并能检测服务是否正常,如果不正常报错退出

解答:

#!/bin/bash
mysql -uroot -p123456 -e "show databases" &>/dev/null
case $? in
0)                                                                                                            #$?返回值为0代表服务正常
        NAME=`mysql -uroot -p123456 -e "show databases" -EN|grep -E "^\*|^information_schema|^performance_schema" -v`  #过滤多余数据库
        for DB_NAME in $NAME
        do
                if
                        [ -e /mnt/sql_bak/${DB_NAME}.sql ]
                then
                        mv /mnt/sql_bak/${DB_NAME}.sql /mnt/sql_bak/${DB_NAME}_`date +%m-%d_%Hh%Mmin%Ss`_bak.sql   #如果要备份的数据库文件已存在就修改名字,date +%m-%d_%Hh%Mmin%Ss表示文件后缀名加上月日分时秒
                        echo -e "\033[31m${DB_NAME}.sql IS Exist And BackUp To ${DB_NAME}_`date +%m-%d_%Hh%Mmin%Ss`_bak.sql\033[0m"
                        mysqldump -uroot -p123456 $DB_NAME > /mnt/sql_bak/${DB_NAME}.sql    #备份数据库
echo "${DB_NAME}.sql Is Create"
                else
                        mysqldump -uroot -p123456 $DB_NAME > /mnt/sql_bak/${DB_NAME}.sql
                        echo "${DB_NAME}.sql Is Create"
                fi
        done
        ;;
*)
        echo -e "\033[31mError: MariaDB Is Not Running\033[0m"
esac
题目6:

有两个文件,一个内容是用户名,一个内容是密码,要求写脚本自动创建两个文件中的用户名和密码

#!/bin/bash
Max_Line=`wc -l $1 | awk '{print $1}'`                          #wc统计$1文件的行数,awk过滤出第一列
for ((NUM=1;NUM<=$Max_Line;NUM++))
do
        USERNAME=`sed -n ${NUM}p $1`
        PASSWORD=`sed -n ${NUM}p $2`
        useradd $USERNAME
        echo $PASSWORD | passwd --stdin $USERNAME
done
题目6:

#!/bin/bash
CREATE()
{
Max_Line=`wc -l $1 | awk '{print $1}'`
for ((NUM=1;NUM<=$Max_Line;NUM++))
do
    USERNAME=`sed -n ${NUM}p $1`
    PASSWORD=`sed -n ${NUM}p $2`
    id $USERNAME &>/dev/null
    if 
        [ "$?" -ne 0 ]
    then
        useradd $USERNAME
        echo $PASSWORD | passwd --stdin $USERNAME
    else
        echo -e "\033[31m$USERNAME Is Exist\033[0m"
        read -p "Pls Choose \"skip\" Or \"delete\" $USERNAME: " INPUT
        if
            [ "$INPUT" == "skip" ]
        then
            continue
        elif
            [ "$INPUT" == "delete" ]
        then
            userdel -r $USERNAME
            echo "$USERNAME Is Delete"
        else
            echo "Just Can Input \"skip\" Or \"delete\""
        fi
    fi
done
}
if 
    [ -n "$1" -a -n "$2" ]
then
    CREATE $1 $2
else
    echo -e "\033[31mPls Input Two File After Script\033[0m"
    exit
fi

猜你喜欢

转载自www.cnblogs.com/vaon/p/9314814.html