我正在写我的第一个BASH脚本,我对c和c#有一定的经验,所以我认为程序的逻辑是正确的。只是语法太复杂了,因为显然有数十亿种方法可以编写相同的东西!
无论如何,这里是脚本:它只是检查参数(字符串)是否包含在某个文件中。如果是这样,它将文件的每一行存储在一个数组中,并将该数组的一项写入文件中。我确信必须有更简单的方法来实现这一目标,但我想对bash循环进行一些练习
#!/bin/bash
NOME=$1
c=0
#IF NAME IS FOUND IN THE PHONEBOOK THANK STORE EACH LINE OF THE FILE INTO ARRAY
#ONCE THE ARRAY IS DONE GET THE INDEX OF MATCHING NAME AND RETURN ARRAY[INDEX+1]
if grep "$NOME" /root/phonebook.txt ; then
echo "CREATING ARRAY"
while read line
do
myArray[$c]=$line # store line
c=$(expr $c + 1) # increase counter by 1
done < /root/phonebook.txt
else
echo "Name not found"
fi
c=0
for i in myArray;
do
if myArray[$i]="$NOME" ; then
echo ${myArray[i+1]} >> /root/numbertocall.txt
fi
done
此代码确实返回myArray的第二个项目(myArray[2]
或文件的第二行)。为什么?
IFS=$'\n' a=($(cat phonebook.txt))
for i in $(seq ${#a[*]}); do
[[ ${a[$i-1]} = $name ]] && echo "${a[$i]}"
done
在Bash 4IFS=$'\n' a=($(cat phonebook.txt))
中可以替换为mapfile -t a < phonebook.txt
。
grep -A1在比赛之后打印一行。-x禁用像-F这样的正则表达式,但仅匹配完整的行。
grep -x "$name" -A1 phonebook.txt | tail -n1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句