我正在尝试编写一个小脚本,它要么从文件中获取输入,要么从用户那里获取输入,然后删除其中的任何空白行。
我试图使它,以便如果没有指定的文件名,它将提示用户输入。也是将手动输入输出到文件、运行代码或将其存储在变量中的最佳方法吗?
到目前为止,我有这样的情况,但是当我使用一个文件运行它时,它会在返回我想要的输出之前给出1行错误。错误说是./deblank: line 1: [blank_lines.txt: command not found
if [$@ -eq "$NO_ARGS"]; then
cat > temporary.txt; sed '/^$/d' <temporary.txt
else
sed '/^$/d' <$@
fi我哪里出问题了?
发布于 2013-08-10 11:03:22
您需要[和]周围的空间。在bash中,[是一个命令,您需要它周围的空格才能这样解释它。
还可以使用(( ... ))检查参数是否存在。因此,您的脚本可以重写为:
if ((!$#)); then
cat > temporary.txt; sed '/^$/d' <temporary.txt
else
sed '/^$/d' "$@"
fi如果只想使用第一个参数,则需要使用$1 (而不是$@)。
发布于 2013-08-10 12:43:08
这里有许多问题:
因此,代码看起来应该是:
if [[ "$@" == "$NO_ARGS" ]]; then
cat > temporary.txt; sed '/^$/d' <temporary.txt
else
sed '/^$/d' <$@
fi或者使用$#代替。
发布于 2013-08-10 19:26:37
与其强迫用户输入文件,不如将给定的文件强制为stdin:
#!/bin/bash
if [[ $1 && -r $1 ]]; then
# it's a file
exec 0<"$1"
elif ! tty -s; then
: # input is piped from stdin
else
# get input from user
echo "No file specified, please enter your input, ctrl-D to end"
fi
# now, let sed read from stdin
sed '/^$/d'https://stackoverflow.com/questions/18161062
复制相似问题