帮助脚本从文件中读取数字并确定它们是偶数还是奇数

帮助脚本从文件中读取数字并确定它们是偶数还是奇数

所以我希望我的脚本能够测试我已经填充了数字的文件是否存在。它确实做到了这一点,但在完成之后,我希望它运行一段时间,检查文件中的数字是奇数还是偶数,因为它检查每行上的每个数字。据我所知,我的脚本结构很糟糕,但我下面的代码没有产生期望的结果。

exist=rnddata.txt
if [ -f $exist ]; then
 echo "file exist processing"
else
 echo "file does not exist"
exit1
fi
while read exist
do
if [ $((exist % 2)) -eq 0 ]; then
 echo "even"
else
echo "odd"
fi
done
exit

答案1

尝试这个:

while read number
do
    if [ $((number % 2)) -eq 0 ]; then 
        echo even
    else    
        echo odd 
    fi      
done < "$exist"

read读取命令行上的变量。因此,您必须将文件数据输入循环中才能read获取它。这里我们用循环的< "$exist"after来做到这一点。donewhile

read命令没有联机帮助页,因为它是 shell 内置命令。要查看它是如何工作的,请输入man sh(提示,搜索,readonly因为这样更容易找到。)

答案2

大多数情况下,您不必担心以下问题:

if    [ -e "$file" ]
then  echo exists
else  echo not exists
fi

当人们做这种事情时,他们实际上只是在白费力气。它还可能存在问题,因为一个脚本与另一个脚本的行为和输出格式之间几乎没有联系。无论如何,这一切都是白费力气,因为:

sh -c 'exec <not_exist; echo can i\?' my_zero

my_zero: 1: my_zero: cannot open not_exist: No such file

当特殊的 shell 内置函数是任何失败的 shell 重定向的对象时,脚本化 POSIX shell 会因写入 stderr 而死亡。特殊的内置函数是:

: continue break exec set . shift unset
times trap exit export readonly eval return

他们的特殊地位可以通过以下方式致电他们来降级command

sh -c 'command exec <not_exist; echo can i\?' my_zero

my_zero: 1: my_zero: cannot open not_exist: No such file
can i?

因此,稳健地处理读/写文件的最直接、最有效的策略是将文件直接放在要与之交互的文件描述符上,并让 shell 根据需要处理任何/所有错误输出。如果应该的话,并且如果您在编写脚本时着眼于让行动自己说话,那么它就会发生。

sh -c '
    cat_fname()
        for   f
        do    exec   <"$f"
              printf "\n%-5s%-$((${#f}+2))s%s\n" === "$f" ===
              cat
        done
    cat_fname a[1-9]/a[1-9].txt not_exist /dev/fd/0'

===  a1/a1.txt  ===
1 1 1 11 1 1 1 1

===  a2/a2.txt  ===
2 2 2 12 2 2 2 2

===  a3/a3.txt  ===
3 3 3 13 3 3 3 3

===  a4/a4.txt  ===
4 4 4 14 4 4 4 4

===  a5/a5.txt  ===
5 5 5 15 5 5 5 5

===  a6/a6.txt  ===
6 6 6 16 6 6 6 6

===  a7/a7.txt  ===
7 7 7 17 7 7 7 7

===  a8/a8.txt  ===
8 8 8 18 8 8 8 8

===  a9/a9.txt  ===
9 9 9 19 9 9 9 9
sh: 4: cannot open not_exist: No such file

相关内容