我想寫一個bash腳本,可以處理參數和輸入類似於許多內置的bash命令。例如,像排序,它可以處理寫一個bash腳本接受來自所有可能方向的參數和輸入(類似於sort -k1 -r)最簡單的方法是什麼?
sort -k 1 -r input.txt
sort input.txt -k 1 -r
cat input.txt | sort -k 1 -r
sort -k 1 -r < input.txt
sort -k 1 -r <(cat input.txt)
我想我的腳本能夠處理參數和輸入的類似的方式
myscript.sh -i 3 -b 4 input.txt
myscript.sh input.txt -i 3 -b 4
cat input.txt | myscript.sh -i 3 -b 4
myscript.sh -i 3 -b 4 < input.txt
myscript.sh -i 3 -b 4 <(cat input.txt)
到目前爲止,我只用了一些功能「讀」和「getopts」,並認爲如果我自己嘗試這樣做可能會出現問題。
爲了讓我說出我的問題更清楚,讓input.text的內容是
aaa
bbb
ccc
,我想用從參數值I和B做一些事情,但我只是把它打印出來在這個例子中。我想要的示例輸出是
i : 3
b : 4
aaa
bbb
ccc
什麼是編寫代碼以處理我的上述示例命令以發出此輸出的最佳方式?
下面是從@chepner的三明治想法得到的代碼,這是目前爲止最好的。
#!/bin/bash -l
die() {
echo >&2 "[exception] [email protected]"
exit 1
}
#parse param
while getopts "i:b:" OPTION; do
case "$OPTION" in
i)
i="$OPTARG"
;;
b)
b="$OPTARG"
;;
*)
die "unrecognized option"
;;
esac
done
if [ -e tmpfile ]
then
rm tmpfile
fi
shift $(($OPTIND - 1))
echo "i : "$i
echo "b : "$b
cat $1 > tmpfile
if read -t 0; then
cat >> tmpfile
fi
cat tmpfile
有什麼錯getopts的?谷歌,有很多例子。 –
@KarolyHorvath我只是不知道如何使用getopts做到上面。 –
getopts非常擅長解析參數,但我找不到任何使用getopts正確處理「進程替換」和「管道」的示例。 –