我有这个bash命令用于捕获两个java程序的输出,每个程序将1个参数放入一个文件中:
cat file.ext | java program1 argument1 | java program2 argument2 > argument3
argument3是可选的,如果没有提供,它应该只是file.srtd
如何为此创建bash脚本?
答案 0 :(得分:2)
如果未使用语法${var:-default}
设置变量,则可以指定变量的默认值。
java program1 "$1" < file.ext | java program2 "$2" > "${3:-file.srtd}"
如果变量包含特殊字符,您还应该记住引用变量。
答案 1 :(得分:1)
在bash中,变量$n
是n
th 参数。变量$#
是用户给出的参数数量。
所以你可以这样做:
#!/bin/bash
arg3=$3
if (( $# < 3 )) ; then
arg3="file.srtd"
fi;
cat file.ext | java program1 $1 | java program2 $2 > $arg3
您可以查看shell parameters和shell parameter expansion了解详情。
答案 2 :(得分:0)
你可以这样做:
file="$3"
[ -z "$file" ] && file="file.srtd"
#then use `file` for the rest of the program.