Hello guy我正在尝试编写一个基本的shell脚本,它以命令行指定的文件形式从提供列表中添加,创建或列出多个用户帐户。我对此非常陌生,过去几个小时一直在敲键盘。下面是语法和代码的示例。 (我称这个脚本为buser)
./ buser.sh -a userlist(-a是选项,userlist是文件名,只是一个例子)
file=$(< `pwd`/$2)
while :
do
case $1 in
-a)
useradd -m "$file"
break
;;
--add)
useradd -m "$file"
break
;;
--delete)
userdel -r "$file"
break
;;
-d)
userdel -r "$file"
break
;;
-l)
cat /etc/passwd | grep "$file"
break
;;
--list)
cat /etc/passwd | grep "$file"
break
;;
esac
done
当useradd命令读取$ file时,它将所有名称作为单行读取,并且出现错误。
任何帮助将不胜感激,谢谢。
答案 0 :(得分:0)
您可以使用sed创建命令,使用eval运行它们:
var=$( sed -e 's/^/useradd -m /' -e 's/$/;/' $file )
eval "$var"
(编辑放入-m标志。)
答案 1 :(得分:0)
不确定我是否理解正确。
但假设您有一个包含以下内容的文件:
**file.txt**
name1
name2
name3
您想调用 buser.sh -a file.txt 并将useradd运行到name1,name2和name3?我还假设您正在使用Linux,而useradd是本机程序,如果是这样,我建议您阅读该人,因为它不支持一次添加用户列表(https://www.tecmint.com/add-users-in-linux/)
你必须多次调用useradd。
while read user;
do
useradd -m $user
done <$2
答案 2 :(得分:0)
一些简化,如果选项不存在,还加上错误处理程序:
while read file ; do
case "$1" in
-a|--add)
useradd -m "$file"
;;
-d|--delete)
userdel -r "$file"
;;
-l|--list)
grep -f `pwd`/"$2" /etc/passwd
break
;;
*)
echo "no such option as '$1'..."
exit 2
;;
esac
done < `pwd`/"$2"
注意:上面的逻辑有点多余...... case "$1"
每次传递都会继续进行相同的测试(结果相同)。 OTOH,它的工作原理,它比每个命令列表中的while
循环代码少。