我正在尝试在Linux中自动创建用户(批量用户)。所以,我创建了一个文本文件,其中包含用户创建所需的所有参数。
Text文件包含以下内容:
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'.
我做错了什么?
P.S:我知道在Linux中有一个名为newusers的命令,但我需要检查相同的脚本以在Linux中创建批量用户。答案 0 :(得分:2)
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
以上只是展示如何将文件内容读入变量,它假设您知道您使用&#34; useradd&#34; &#34; passwd&#34;线。
答案 1 :(得分:0)
尝试:
awk '{gsub(/:/,"-")} 1' Input_file
所以简单地用冒号全局替换 - 和1将打印当前(已编辑)的行。
答案 2 :(得分:0)
如果您遇到awk,可以使用 Awk Global substitution:
awk '{gsub(/:/,"-")} 1' your_file
使用带有g
标记sed "s/:/-/g" your_file
标记的sed也可行:
/**
* @var \Magento\Catalog\Api\CategoryLinkManagementInterface
*/
protected $_categoryLinkManagement;
$this->_categoryLinkManagement->assignProductToCategories($sku, $categoryIds);
//where $sku is sku of product, and $categoryIds is array of real categories ids
在这两种情况下,您编辑的线条都会打印到屏幕上。
答案 3 :(得分:0)
我会用while来逐行读取文件,这样整行就会存储在你选择的变量中(在我的例子中:line)。然后你可以回显变量,awk将完成其余的工作。我更喜欢$()而不是``所以我现在都使用它们。对于这么多数据,您可以创建一个循环,以便进行代码分类并更好地管理。
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