首先,我希望你们知道我做了我的研究,当然找到了大量关于这个主题的文档,但是没有一个有效。
我有一个文本文件,每行代码为:
newUserToAdd,inThisGroup
即:
约翰,客户端
因此,如果用户列表尚未存在,请尝试创建用户列表,并将其置于此组中。问题是,如果组名是文本文件是客户端,我希望计算机中的组名是"客户端"。所以我需要添加" s"字符。我尝试了很多方法,但没有一种方法可行。
如果这有助于理解我的脚本。
for line in `cat /home/jonathan/Desktop/Utilisateurs.txt`
do
echo $line > /dev/null
user=`echo $line | cut -d "," -f1`
group=`echo $line | cut -d "," -f2`
groups=${group}"s"
if [ `grep $group /etc/group` ] ; then
echo "Ce groupe existe. Aucune action à faire."
else
#echo "Ce groupe n'existe pas. Création immédiate."
echo $groups
#groupadd $groups
fi
done
但它一直给我这种输出......(我的名单中有3个组名,法语:" Superviseur"," Technicien" && #34;客户端"。控制台输出是:
superviseur
sechnicien
sechnicien
slient
slient
slient
superviseur
为什么不断更改第一个字母而不是在结尾添加字母?
非常感谢你的时间!
答案 0 :(得分:0)
这可能是由Utilisateurs.txt
文件中每行末尾的回车引起的。使用dos2unix
实用程序将\r\n
(Windows样式的换行符)转换为\n
(Unix样式的换行符)。
此实用程序可以在存储库中找到,具体取决于您的分发(例如,在Canonical repository中),也可以手动创建(例如,快速sed script)。
您遇到此问题的原因是回车(\r
)将光标拉到线的左侧而不将光标向下移动一行。这在某些情况下很有用,例如当您想要重写当前行时。但是,这可能不是你在这里寻找的。 p>
对于更多上下文,Bash使用其内部字段分隔符(IFS)来确定在for
等命令中处理字符串时的分隔符。 Bash中的默认IFS是$' \n\t'
,其中包括空格,换行符和制表符,但不包括回车符。这意味着您的for
- 循环将在换行符上分开,但会保持回车不变。