このスクリプトに引数を渡そうとしても機能しません。この問題を解決する方法を知っている人はいますか?引数を使用したくありません。 getoptsを使いたいです。
この部分については
# Get command line parameters
i=
a=
y=
while getopts iay: name
case $name in
i) i="$OPTARG" ;;
a) a="$OPTARG" ;;
y) y="$OPTARG" ;;
?) exit;;
esac
done
これはスクリプトです。
if [ $# -ne 3 ]
then
echo -e "\nUsage: mortgage rate amount period\n"
exit 1
fi
# Get command line parameters
i=
a=
y=
while getopts iay: name
case $name in
i) i="$OPTARG" ;;
a) a="$OPTARG" ;;
y) y="$OPTARG" ;;
?) exit;;
esac
done
# Compute the monthly payment
x=$(echo "scale=20;1+$i/200" | bc)
z=$(echo "scale=20;1/6" | bc)
x2z=$(echo "scale=20;e($z*l($x))" | bc -l)
y12=$(echo "scale=20;-$y*12" | bc)
x2z2y12=$(echo "scale=20;e($y12*l($x2z))" | bc -l)
p=$(echo "scale=3;$a*(($x2z-1))/(1-$x2z2y12)" | bc)
# Print the monthly payment
echo $p
exit 0
========================== ソーススクリプトは次のとおりです。
if [ $# -ne 3 ] then echo -e "\nUsage: mortgage rate amount period\n" exit 1 fi
Get command line parameters
i=$1; a=$2; y=$3
Compute the monthly payment
x=$(echo "scale=20;1+$i/200" | bc) z=$(echo "scale=20;1/6" | bc) x2z=$(echo "scale=20;e($z*l($x))" | bc -l) y12=$(echo "scale=20;-$y*12" | bc) x2z2y12=$(echo "scale=20;e($y12*l($x2z))" | bc -l) p=$(echo "scale=3;$a*(($x2z-1))/(1-$x2z2y12)" | bc)
Print the monthly payment
echo $p exit 0
ベストアンサー1
シェルスクリプトのパラメータは$1、$2、$3などです。たとえば、script.shファイルにecho $ 2; echo $1 と入力して実行可能にし、./script.sh one-two として実行します。
あなたのスクリプトから。
i=$1
a=$2
y=$3
今、iは./myscript.sh 3 4 23
3、aは4、yは23です。