脚本输入文件名或标准输入

脚本输入文件名或标准输入
#!/bin/sh


read vstup

if [ -f "$vstup" ]
    then
    cat $vstup
else if [ $vstup = "-"]
        then
         while [ $stadvstup != "q"]
            do
            read $stadvstup >> temp.txt
            done
        cat temp.txt
        rm temp.txt
fi
fi

我想制作脚本,允许用户输入文件名或标准输入。如果用户输入文件名,则输出文件内容,如果用户输入“-”,则允许用户输入然后输出。我使用了以下代码,请有人给我提示,有什么问题吗?

答案1

你必须做这样的事情,

#!/bin/sh

file="temp.txt"
read -r vstup

if [ -f "$vstup" ]
then
     cat "$vstup"
elif [ "$vstup" = "-" ]
then
     while read line
     do
         # break if the line is empty
         [ -z "$line" ] && break
              echo "$line" >> "$file"
     done
   cat $file
   rm $file
fi

答案2

#!/bin/sh

read vstup

if [ -z "$vstup" ] ; then
    :
elif [ "$vstup" = "-" ] ; then
    vstup=''
elif [ ! -f "$vstup" ] ; then
    printf "%s is not a regular file\n" "$vstup"
    exit 1
fi

cat $vstup

cat$vstup如果没有给出文件名(即如果为空),则默认将 stdin 复制到 stdout 。它将继续这样做,直到用户输入 EOF 字符 ( Ctrl- D)

输入空行的处理方式与输入 vstup 相同-

相关内容