[英]awk field separator using “:” and ignore spaces within “:”
我正在尝试在Linux中自动执行用户创建(批量用户)。 因此,我创建了一个文本文件,其中包含用户创建所需的所有参数。
文本文件包含以下内容:
tom:tom1:588:0:test user1:/home/test:/bin/false
harry:harry1:589:0:test test2:/hom/test2:/bin/nologin
尝试使用awk命令来打印列的for循环并使用/tmp/user.txt中的信息创建用户
for userdetails in $(cat /tmp/user.txt)
do
user=`echo $userdetails | awk -v FS=: '{print $1}'`
passwd=`echo $userdetails | awk -v FS=: '{print $2}'`
uid=`echo $userdetails | awk -v FS=: '{print $3}'`
gid=`echo $userdetails | awk -v FS=: '{print $4}'`
comment=`echo $userdetails | awk -v FS=: '{print $5}'`
home_dir=`echo $userdetails | awk -v FS=: '{print $6}'`
user_shell=`echo $userdetails | awk -v FS=: '{print $7}'`
useradd -d "$home_dir" -c "$comment" -s "$user_shell" -u "$uid" -g "$gid" "$user"
echo "$passwd" | passwd "$user" --stdin;
done
实际输出:
useradd: invalid home directory ''
passwd: Unknown user name 'tom'.
useradd: invalid home directory ''
passwd: Unknown user name 'user1'.
useradd: invalid home directory ''
passwd: Unknown user name 'harry'.
useradd: invalid home directory ''
passwd: Unknown user name 'test2'.
我做错了什么?
PS:我知道Linux中有一个名为newusers的命令,但是我需要通过脚本检查该命令以在Linux中创建批量用户。
idk您是如何开始这条赛道的,但您还处于劣势。 只需使用一个shell循环:
while IFS=':' read -r user passwd uid gid comment home_dir user_shell; do
useradd -d "$home_dir" -c "$comment" -s "$user_shell" -u "$uid" -g "$gid" "$user"
echo "$passwd" | passwd "$user" --stdin;
done < /tmp/user.txt
上面仅显示了如何将文件内容读入变量,它假设您知道“ useradd”和“ passwd”行在做什么。
尝试:
awk '{gsub(/:/,"-")} 1' Input_file
因此,简单地用-和1全局替换冒号将打印当前(已编辑)行。
如果您对awk感到困惑,则可以使用Awk Global替换 :
awk '{gsub(/:/,"-")} 1' your_file
sed "s/:/-/g" your_file
在这两种情况下,您编辑的行都将被打印到屏幕上。
我会用while来逐行读取文件,因此整行将存储在您选择的变量中(在我的情况下为line)。 然后,您可以echo变量,awk将完成其余的工作。 我更喜欢$()而不是``,所以我现在都使用。 对于这么多的数据,您可以在while中创建一个循环,以使代码分类程序更易于管理。
cat /tmp/user.txt | while read line
do
user=`echo $line | awk -F ":" '{print $1}'`
passwd=$(echo $line | awk -F ":" '{print $2}')
uid=$(echo $line | awk -F ":" '{print $3}')
gid=$(echo $line | awk -F ":" '{print $4}')
comment=$(echo $line | awk -F ":" '{print $5}')
home_dir=$(echo $line | awk -F ":" '{print $6}')
user_shell=$(echo $line | awk -F ":" '{print $7}')
useradd -d "$home_dir" -c "$comment" -s "$user_shell" -u "$uid" -g "$gid" "$user"
echo "$passwd" | passwd "$user" --stdin;
done
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.