我想说,如果文档不存在,那么创建文档。接下来阅读文档的每一行,如果没有一行与$site/$name
变量匹配,则将$site/$name
变量添加到文档中。
#!/bin/bash
site=http://example.com
doc=$HOME/myfile.txt
if [ ! -f $doc ]
then
touch $doc
fi
read -p "name? " name
while read lines
do
if [[ $lines != $site/$name ]]
then
echo $site/$name >> $doc
fi
done <$doc
echo $doc
echo $site
echo $name
echo $site/$name
echo $lines
在read -p
提示符下键入测试结果
path/to/myfile.txt
http://example.com
test
http://example.com/test
我觉得我应该知道这一点,但我只是没有看到它。我做错了什么?
答案 0 :(得分:2)
如果文件最初为空,则永远不会进入循环,因此永远不会添加该行。如果文件不为空,则无论如何都要为每个不匹配的行添加一行。试试这个:设置一个标志来指示是否添加该行,然后通读该文件。如果找到匹配的行,请清除该标记以防止在循环后添加行。
do_it=true
while read lines
do
if [[ $lines = $site/$name ]]
then
do_it=false
break
fi
done < "$doc"
if [[ $do_it = true ]]; then
echo "$site/$name" >> "$doc"
fi
答案 1 :(得分:2)
如果文件不存在,以下内容将创建该文件。然后检查它是否包含$site/$name
。如果找不到,则将字符串添加到文件末尾:
#!/bin/bash
site=http://example.com
doc=$HOME/myfile.txt
read -p "name? " name
touch "$doc"
grep -q "$site/$name" "$doc" || echo "$site/$name" >>"$doc"
touch "$doc"
如果文件不存在,则创建该文件。如果它确实存在,则运行此命令的唯一副作用是更新文件的时间戳。
grep -q "$site/$name" || echo "$site/$name" >>"$doc"
如果grep命令找到字符串,则将其退出代码设置为true。如果找不到它,那么“or”子句(在shell中,||
表示逻辑 - 或)被触发,echo
命令将字符串添加到文件末尾。