背景: 我在script_testing下的单字母目录中有一堆名为username.sub的文件名(用户名的第一个字母是文件夹名称)。对于每个username.sub,我需要检查行用户。$ username.contacts是否存在,如果不存在,则追加行后跟真实标签。
问题: 鉴于我下面的代码,为什么不附加到文件?我想我错过了一些简单的事情。即使那条线路不存在,我仍然会收到“已经订阅的联系人”。
#!/bin/bash
Path_to_files=/home/user/script_testing/^[A-z]+$/
FULLNAME="${Path_to_files##*/}"
NAME="${FULLNAME%.*}"
if grep 'contacts' $NAME.sub; then
echo 'contacts already subscribed'
else
echo "subscribing to contacts"
echo -e user.$NAME.Contacts \t >> $NAME.sub
fi
答案 0 :(得分:1)
您正在搜索单词contacts
- 这取决于您在这些文件中的其他内容,可能始终存在。
相反,请使用grep -q "^user\.$NAME\.Contacts"
查找您的行。
答案 1 :(得分:1)
修正了以下内容:
#!/bin/bash
#testing directory
#p=$HOME/script_testing
for f in "$p"/*/*.sub ; do
# if this is a file
if [ -f "$f" ]; then
# define variables
F="${f##*/}"
u="${F%%.*}"
cont=$(grep "user.$u.Contacts" "$f")
cal=$(grep "user.$u.Calendar" "$f")
# if our file doesn't contain Contacts subscription
if [ -z "$cont" ]; then
# add Contacts subscription
echo -e "user.$u.Contacts\t" >> "$f"
#fi
# if our file doesn't contain Calendar subscription
elif [ -z "$cal" ]; then
# add Calendar subscription
echo -e "user.$u.Calendar\t" >> "$f"
fi
fi
done
还添加额外的行以追加。请告诉我这是否存在问题所以我可以学习,但我没有遇到任何问题。