shell习题第27题:带选项的增删用户脚本

【题目要求】

写一个支持选项的增加或删除用户的shell脚本

#!/bin/bash
if [ $# -eq 0 ]; then
    echo "Wrong, use bash $0 --add username, or bash $0 --del username or bash $0 -- help"
    exit
fi

exist_user()
{
    if ! id $1 2>/dev/null >/dev/null
    then
        echo $i not exist
    fi
}

case $1 in
    --add)
        if [ $# -gt 2 ]; then
            echo "Wrong, use bash $0 --add username, or bash $0 --add user1,user2,user3..."
            exit
        else
            n=`echo $2 | awk -F ‘,‘ ‘{prin $NF}‘`
            if [ $n -gt 1 ]; then
                for i in `seq 1 $n`
                do
                    username=`echo $2 | awk -v j=$i -F‘,‘ ‘{print $j}‘`
                    exist_user $username
                    useradd $username
            fi
        fi
        ;;
    --del)
        if [ $# -gt 2 ]; then
            echo "Wrong, use bash $0 --del username, or bash $0 --del user1,user2,user3..."
            exit
        else
            n=`echo $2 | awk -F ‘,‘ ‘{prin $NF}‘`
            if [ $n -gt 1 ]; then
                for i in `seq 1 $n`
                do
                    username=`echo $2 | awk -v j=$i -F‘,‘ ‘{print $j}‘`
                    userdel $username
                done
            else
                userdel $2
            fi
        fi
        ;;        

原文地址:https://www.cnblogs.com/dingzp/p/10992245.html

时间: 2024-09-29 04:04:38

shell习题第27题:带选项的增删用户脚本的相关文章

shell习题第10题:打印每个单词的字数

[题目要求] 用shell打印下面这句话中字母数小于6的单词. Bash also interprets a number of multi-character options. [核心要点] for循环遍历所有单词 wc -L获取字符串长度 [脚本] #!/bin/bash c="Bash also interprets a number of multi-character options." n=`echo $c|awk -F '[ +-.]' '{print NF}'` for

shell习题第2题:统计ip访问量

[题目要求] 有日志1.log,部分内容如下: 112.111.12.248 – [25/Sep/2013:16:08:31 +0800]formula-x.haotui.com “/seccode.php?update=0.5593110133088248″ 200″http://formula-x.haotui.com/registerbbs.php” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;)” 61.147.76.5

shell习题第13题:监控nginx进程

[题目要求] 在服务器上写一个脚本,要求如下 1. 每隔10秒去检查而一次服务器上的nginx进程数,如果>=500的时候,就需要自动重启一下nginx服务,并检测启动是否成功 2. 如没有正常启动还要再一次启动,最大不成功数超过5次则需要立即发邮件通知管理员,并且之后不需要再检测 3. 如果启动成功之后,1分钟后再次检测nginx进程,若正常则重复之前的操作(每隔10秒检查一次),若还是>=500,那放弃重启并需要发邮件给管理员,然后自动退出脚本.假设发邮件脚本为mail.py [核心要点]

shell习题第22题:

[题目要求] 加入A服务器可直接ssh到B,不用输入密码.A和B都有一个目录是/data/web/这下有很多文件,我们不知道这下面有多少层目录,但是之前的目录结构和文件是一模一样的.但是现在不确定是否一致. 所以以A为标准,检测AB不同的文件,看看哪些文件是被修改过的 [核心要点] md5sum file [脚本] #!/bin/bash dir=/data/web [ -f /tmp/md5.list ] && rm -f /tmp/md5.list while read line do

shell习题第24题:杀进程

[题目要求] 一台机器负载高,top查看到有很多sh的进程,然后top -c查看可以看到对应的进程命令是sh -c /bin/clear.sh 经分析后发现是因为该脚本执行时间太长,导致后续执行时,上次的脚本还未执行结束,写一个脚本批量杀死所有的sh的进程 [核心要点] kill -9 pid [脚本] #!/bin/bash for p in `ps aux | grep clear.sh|awk '{print $2}'` do kill -9 $p done #或者 ps aux | gr

shell习题第25题:判断是否开启web服务

[题目要求] 写一个脚本判断我的linux服务器是否开启web服务?监听80端口 [核心要点] netstat -lntp | grep '80' [脚本] #!/bin/bash n=`netstat -lntp | grep ':80' | wc -l` if [ $n -eq 0 ]; then echo "It not listen port 80" else ser=`netstat -lntp | grep ':80 ' | awk -F '/' '{print $NF}'

shell习题第26题:监控mysql服务

[题目要求] 假设mysql密码是123456. 写脚本监控mysql服务是否正常,比如是否可以执行show processlist,并检测一下当前的mysql服务是主还是从.如果是从,请判断他的主从服务是否正常.如果是主,则不需要做什么 [核心要点] mysql -uroot -p123456 -e "show processlist" show slave status [脚本] #!/bin/bash mysql="/usr/local/mysql/bin/mysql

case做带选项的shell脚本以及结合while做交互选择的shell脚本的最基本写法

1.case做带选项的执行脚本: #!/bin/bash case $1 in x) echo "x is selected" ;; *) echo "please use x" esac 二.case结合while做交互脚本: #!/bin/bash while true do read -p "Enter port of chaoxingdata(d,1): " port case ${port} in d) echo "port=

linux shell习题训练

shell习题训练 求2个数之和 计算1-100的和 将一目录下所有的文件的扩展名改为bak 编译当前目录下的所有.c文件: 打印root可以使用可执行文件数,处理结果: root's bins: 2306 打印当前sshd的端口和进程id,处理结果: sshd Port&&pid: 22 5412 输出本机创建20000个目录所用的时间,处理结果: real 0m3.367s user 0m0.066s sys 0m1.925s 打印本机的交换分区大小,处理结果: Swap:1024M