如何将.txt文件作为变量添加到shell脚本中

时间:2017-05-25 02:24:22

标签: bash shell

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时,它将所有名称作为单行读取,并且出现错误。

任何帮助将不胜感激,谢谢。

3 个答案:

答案 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循环代码少。