您的位置:首页 > 运维架构 > Shell

shell脚本(二)练习题目

2017-12-16 20:57 441 查看
题目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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: