case语句企业级生产案例

范例9-7:实现通过传参的方式往/etc/openvpn_authfile.conf里添加用户,具体要求如下。

  1)命令用法为:

  USAGE: sh adduser {-add|-del|-search} username

  2)传参要求为:

  参数为-add,表示添加后面接的用户名。

  参数为-del,表示删除后面接的用户名。

  参数为-search,表示查找后面接的用户名。

  3)如果有同名的用户,则不能添加,如果没有对应的用户,则无需删除,查找到用户或没有用户时应给出明确提示。

  4)/etc/openvpn_authfile.conf不能被所有外部用户直接删除及修改。

#!/bin/sh
#create by lewen
#Source function library.
. /etc/init.d/functions
#config file path
FILE_PATH=/etc/openvpn_authfile.conf       #<==这是openvpn的登录授权文件路径。
[ ! -f $FILE_PATH ] && touch $FILE_PATH       #<==如果变量对应的文件不存在,则创建文件。
usage(){                                   #<==帮助函数。#<==这是一个可以替代echo的输出菜单等内容的方法。
    cat <<EOF
    USAGE: `basename $0` {-add|-del|-search} username
EOF
}
#judge run user
if [ $UID -ne 0 ] ;then       #<==必须是root用户才能执行本脚本echo "Youare not supper user,please call root!"
    exit 1;
fi
#judge arg numbers.
if [ $# -ne 2 ] ;then       #<==传入的参数必须为两个usage
    exit 2
fi

#满足条件后进入case语句判断case "$1" in              #<==获取命令行第一个参数的值。
    -a|-add)
        shift                                                #<==$1清除$2替换为$1位置参数左移if grep "^$1$" ${FILE_PATH} >/dev/null 2>&1       #<==过滤命令行第一个参数的值,如果有
          then
            action $"vpnuser,$1 is exist" /bin/false
            exit
        else                                                        #<==如果文件中不存在命令行传参的一个值,则执行下面的指令。
            chattr -i ${FILE_PATH}                                      #<==解锁文件。
            /bin/cp ${FILE_PATH} ${FILE_PATH}.$(date +%F%T)                     #<==备份文件(尾部加时间)。

            echo "$1" >> ${FILE_PATH}                            #<==将第一个参数(即用户名)加入到文件。
            [ $ -eq 0 ] && action $"Add $1" /bin/true            #<==如果返回值为0,提示成功。

            chattr +i ${FILE_PATH}       #<==给文件加锁。
        fi
        ;;
    -d|-del)
        shift
        if [ `grep "\b$1\b" ${FILE_PATH}|wc -l` -lt 1 ]       #<==过滤第一个参数值,  并看文件中是否存在。
          then                                                  #<==如果不存在,则执行下面的指令。
            action $"vpnuser,$1 is not exist." /bin/false
            exit
        else                                    #<==否则执行下面的指令,存在才删除
            chattr -i ${FILE_PATH}              #<==给文件解锁,准备处理文件的内容。
            /bin/cp ${FILE_PATH} ${FILE_PATH}.$(date +%F%T)         #<==备份文件(尾部加时间)。

            sed -i "/^${1}$/d" ${FILE_PATH}                     #<==删除文件中包含命令行传参的用户。
            [ $? -eq 0 ] && action $"Del $1" /bin/true           #<==如果返回值为0,提示成功。

            chattr +i ${FILE_PATH}              #<==给文件加锁。
            exit
        fi
        ;;
    -s|-search)
        shift
        if [ `grep -w "$1" ${FILE_PATH}|wc -l` -lt 1 ]      #<==过滤第一个参数值,并看文件中是否存在。
          then
            echo $"vpnuser,$1 is not exist.";exit
        else
            echo $"vpnuser,$1 is exist.";exit
        fi
        ;;
    *)
        usage
        exit
        ;;
esac
add-openvpn-user

相关文章:

  • 2022-01-31
  • 2021-06-12
  • 2022-03-06
  • 2022-02-08
  • 2022-12-23
  • 2021-04-13
  • 2022-12-23
  • 2021-05-15
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-05-28
  • 2021-05-21
  • 2022-12-23
  • 2022-12-23
  • 2021-04-14
相关资源
相似解决方案