これは、ファイルを列でソートする私の bash スクリプトです。
while getopts "123456" flag
do
sort -t: -k $flag names.txt
done
今のところ、必要なことは正確に実行されますが、ファイル名もパラメーターにする必要があります。
現在の入力は ./sortScrpt -2 です。
入力が ./sortScript -2 names.txt のようになる必要があります
どんな助けでも素晴らしいでしょう。ありがとう
bash スクリプトを次のように変更します。
while getopts "123456" flag
do
sort -t: -k $flag "${2}"
done
2 番目のパラメーターに「${2}」を使用できるパラメーターの取得
複数のソートパラメータが必要な場合は、スクリプトを次のように更新できます。
#first parse -f fname
getopts "f:" f
fname=$OPTARG
while getopts "123456" flag
do
sort -t: -k $flag $fname
done
このスクリプトは次のように実行できます
$ ./script.sh -f names.txt -2
または複数の種類の場合
$ ./script.sh -f names.txt -2 -3
始めるための何か:
#!/bin/bash
while getopts ":2:" opt; do
case $opt in
2)
echo "-2 was triggered, Parameter: $OPTARG" >&2
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
:)
echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
esac
done
出力:
$ ./a.sh -2 names.txt
-2 was triggered, Parameter: names.txt
「sort-arg then file」要件 + エラーチェック用に改訂された編集:
#!/bin/bash
sflag=""
sfile=""
while getopts "123456" flag
do
[ -z "$sflag" ] && sflag="$flag"
done
shift $(($OPTIND - 1))
sfile="$1"
if [[ "$sflag" ]] && [[ "$sfile" ]];
then
sort -t: -k $sflag $sfile
else
# error - bail out
echo "usage: $0 -[123456] file.txt" >&2
exit 1
fi
OPTINDは getopts によって設定され、$#+1 (追加のパラメーターがないなど) または getopts フラグに一致しない最初のパラメーターのいずれかを指します。