Linux Shell 通过传参的方式往/etc/user.conf里添加用户

实现通过传参的方式往/etc/user.conf里添加用户,具体要求如下:
1)命令用法:
USAGE: sh adduser {-add|-del|-search} username
2)传参要求:
如果参数为-add时,表示添加后面接的用户名,
如果参数为-del时,表示删除后面接的用户名,
如果参数为-search时,表示查找后面接的用户名,
3)如果有同名的用户则不能添加,没有对应用户则无需删除,查找到用户以及没有用户时给出明确提示。
4)/etc/user.conf不能被所有外部用户直接删除及修改

分析
1、判断文件是否存储,不存在先创建;判断用户执行次脚本时传参格式是否符合要求,包括:a、参数是否是2个,可以通过$#判断;b、格式是否符合要求,是否为-add username;c、执行脚本的用户是否为root
2、因为添加、删除、查询用户前要先判断用户是否存在文件中,一次有2个判断条件,不考虑用case语句,可以用if..else..,先对符合要求的进行判断,其余的做else处理

注意
判断用户是否存在文件中我使用了grep "^$2$" $file | wc -l,^$2$是为了精准匹配,避免删除用户wang,将wang1、wang2、wang3都删除;且改语句要放在对用户输入参数判断之后,确保有参数$2,否则grep会卡死。

答案:
#!/bin/bash

file="/etc/user.conf"
if [ ! -f $file ];then
touch $file
elif [ $# -ne 2 ];then
echo "USAGE: sh adduser {-add|-del|-search} {username|\"username\"}"
exit 0
elif [ ! "$UID" = 0 ];then
echo "Please use the root user operation"
exit 0
fi

comp=grep "^$2$" $file | wc -l

if [ $1 = "-add" -a $comp -ne 1 ];then
echo $2>>$file && echo "Account $2 add successfule!!"
elif [ $1 = "-add" -a $comp -eq 1 ];then
echo "Account $2 exist,add fail!"
elif [ $1 = "-del" -a $comp -ge 1 ];then
sed -i "/^$2$/d" $file && echo "Account $2 delete successful!!!"
elif [ $1 = "-del" -a $comp -lt 1 ];then
echo "Account $2 dose not exist,delete fail!"
elif [ $1 = "-search" -a $comp -ge 1 ];then
echo "Account grep "^$2$" $file is exist"
elif [ $1 = "-search" -a $comp -ne 1 ];then
echo "Account $2 does not exist!"
else
echo "USAGE: sh adduser {-add|-del|-search} username"
exit 0
fi

原文地址:http://blog.51cto.com/252885/2327806

时间: 2024-10-09 17:04:06

Linux Shell 通过传参的方式往/etc/user.conf里添加用户的相关文章

shell编程实例---实现整数的加减乘除余运算(利用read和脚本传参的方式)

1.read读取方式: [[email protected] scripts]# vim read_1.sh    1 #!/bin/bash   2 # Filename: read_1.sh   3 # Describe: Integer arithmetic   4 # Author: Lijun   5 # Date: 2015-08-24   6 # Version: 1.0.1   7     8 read -p "Please input two nums: " a b 

向linux服务器上传下载文件方式收集

向linux服务器上传下载文件方式收集 1. scp [优点]简单方便,安全可靠:支持限速参数[缺点]不支持排除目录[用法] scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用 ssh,并且和ssh 使用相同的认证方式,提供相同的安全保证 . 命令格式: scp [参数] <源地址(用户名@IP地址或主机名)>:<文件路径> <目的地址(用户名 @IP 地址或主机名)>:<文件路径> 举例: scp /home/work/source.

uboot给内核传参的方式——tag

一:tag是什么? tag 是一个数据结构:stract tag  这种数据格式在uboot和kernel是一样的,也就是说uboot在启动的时候将需要传给kernel的参数放在了DDR的某个地址处,而存放格式就是tag格式,然后kernel就会到这个地址去读取这些参数,读取方式也是按tag格式去读取的. 简单来说tag就像是一个数组一样,是一块连续的内存,里面存放了uboot需要传递给kernel的参数信息,我们通过定义一个指针params(static struct tag *params;

shell脚本传参

写了个脚本自动生成pdf上传github受不了每次相同的commit决定使用脚本传参 简单好用使用加粗方法,更复杂的可以参考下面两个详解. 如何给shell脚本传参数 http://jingyan.baidu.com/article/b24f6c822645b786bfe5daff.html #!/usr/bin/zsh xelatex -synctex=1 -interaction=nonstopmode "leetcode-cpp".tex > makepdf.log cd

python--脚本传参与shell脚本传参(位置参数)

写一个最简单的shell脚本,了解shell脚本是如何传参 1. vim test1.sh name=$1 age=$2 echo ${name} echo ${age} 2.调用脚本并传参 sh test1.sh zhangsan 14 11.  vim test1.py test1.py import sys try: if sys.argv[1]: print(sys.argv[1]) except Exception as e: print('当前无参数') 22.调用脚本并传参 原文地

shell 脚本传参

在 shell 中我们会见到  $0.$1.$2这样的符号,这是什么意思呢? 简单来说 $0 就是你写的shell脚本本身的名字,$1 是你给你写的shell脚本传的第一个参数,$2 是你给你写的shell脚本传的第二个参数 比如你新建了一个shell脚本 Test.sh, 内容如下: #!/bin/sh echo "shell脚本本身的名字: $0" echo "传给shell的第一个参数: $1" echo "传给shell的第二个参数: $2&quo

shell脚本传参执行spark-submit

读取多个目录下的本地文件,多个目录通过循环遍历的方式,以参数传递: #!/bin/bash i=0while [ $i -lt 10000 ] do echo "i=$i" spark-submit --class com.link.fblx.readFromPath --driver-memory 20G --executor-memory 20G --num-executors 1 --executor-cores 25 --total-executor-cores 25 --ja

企业内部网段检测有多少主机存活——shell脚本传参(二)

企业内部网段检测有多少主机存活 前言:这个脚本初衷来自于之前看了网络班苟国齐的空间发布的脚本,今天改版了一下,感觉挺方便的. 环境简介: IP地址段 外网 内网 10.0.0.0 Yes No 172.16.1.0 No Yes 1).编写脚本 [[email protected] oldboy20160103]# cat check_hosts.sh  #!/bin/bash #no.1 Check functions  [ ! -f /etc/ini.d/functions ] && 

linux shell 用sed命令在文本的行尾或行首添加字符

from:http://www.cnblogs.com/aaronwxb/archive/2011/08/19/2145364.html 昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed命令上,今天不总结一下都对不起昨天流逝的时间啊~~~ 用sed命令在行首或行尾添加字符的命令有以下几种: 假设处理的文本为test.file 在每行的头添加字符,比如"HEAD",命令如下: sed 's/^/HEAD&/g' test.file 在每行的行尾添加字符,比如“T