我正在尝试编写一个可以首先读取脚本文件的shell脚本。然后搜索包含我选择的"关键字"的行,然后在行尾添加一些单词。这些"关键词"只出现在乞求的行中。
这是我到目前为止所做的:
#!/bin/bash
filename="$1"
while IFS='' read -r line; do
echo "$line"
done < "filename"
我尝试是否可以将一行分成几个字段,但我失败了。因为我想然后使用"if"进行搜索。但似乎"read"命令只能将整行保存到一个变量中。
这是我尝试过的:
#!/bin/bash
filename="$1"
while IFS='' read -r f1 f2 f3; do
echo "$f1"
done < "filename"
但它的输出是一回事。
有人可以给我一些建议吗?
以前:
Final=$(date -d "2016-12-15 14:00" "+%j")
while true ; do
Today=$(date "+%j")
Days=$((Final - Today))
if (( Days >= 14 )) ; then
echo party
elif (( Days >= 2 )) ; then
echo study
elif (( Days == 1 )) ; then
for Count in 1 2 3
do
echo panic
done
else
break
fi
sleep 8h
done
后:
Final=$(date -d "2016-12-15 14:00" "+%j")
while true ; do # loop 1
Today=$(date "+%j")
Days=$((Final - Today))
if (( Days >= 14 )) ; then # selection 1
echo party
elif (( Days >= 2 )) ; then
echo study
elif (( Days == 1 )) ; then
for Count in 1 2 3 # loop 2
do
echo panic
done # loop 2
else
break
fi # selection 1
sleep 8h
done # loop 1
由于您希望给定的行格式保持不变,因此我们必须首先将行作为一个整体read
(就像您对IFS='' read -r line
所做的那样),然后将其分开以检查命令关键字。
#!/bin/bash
filename=$1
while IFS='' read -r line # read whole line
do set -- $line # split to fields
case $1 in
while|for) comment=" # loop $((++loop))";;
done) comment=" # loop $((loop--))";;
if) comment=" # selection $((++slct))";;
fi) comment=" # selection $((slct--))";;
*) comment=;;
esac
echo "$line$comment"
done <"$filename"