私は構文解析された入力を持つスクリプトを持つことができるようにgetoptsを使用する方法を学びようとしています(getoptsが良いかもしれないと思いますが)。パーティション使用率を返す簡単なスクリプトを作成しようとしています。問題は、私のbash関数の1つが$1
関数内で変数として参照する関数が好きではないようです。私が引用した理由は、関数にすべてのマウントポイントを表示するのではなく、表示するオプションの引数でマウントポイントを渡すことができるから$1
です。get_percent
スクリプト
#!/usr/bin/bash
set -e
set -u
set -o pipefail
get_percent(){
if [ -n "$1" ]
then
df -h $1 | tail -n +2 | awk '{ print $1,"\t",$5 }'
else
df -h | tail -n +2 | awk '{ print $1,"\t",$5 }'
fi
}
usage(){
echo "script usage: $(basename $0) [-h] [-p] [-m mount_point]" >&2
}
# If the user doesn't supply any arguments, we run the script as normal
if [ $# -eq 0 ];
then
get_percent
exit 0
fi
# ...
出力
$ bash thing.sh
thing.sh: line 8: $1: unbound variable
$ bash -x thing.sh
+ set -e
+ set -u
+ set -o pipefail
+ '[' 0 -eq 0 ']'
+ get_percent
thing.sh: line 8: $1: unbound variable
ベストアンサー1
set -u
まだ設定されていない変数を参照すると、説明したように正しく中断されます。引数なしでスクリプトを呼び出すため、引数なしで呼び出されるため、get_percent
設定はオフに$1
なります。
関数を呼び出す前にこれを確認するか、デフォルトの拡張機能を使用してください(${1:-default}
まだ別のものに設定されていない場合は別のものに拡張されます)。default