Jika Anda tidak sepenuhnya terikat untuk menggunakan "from" dan "to" sebagai nama opsi Anda, cukup mudah untuk mengimplementasikannya menggunakan getopts:
while getopts f:t: opts; do
case ${opts} in
f) FROM_VAL=${OPTARG} ;;
t) TO_VAL=${OPTARG} ;;
esac
done
getopts
adalah program yang memproses argumen baris perintah dan dengan mudah menguraikannya untuk Anda.
f:t:
menentukan bahwa Anda mengharapkan 2 parameter yang berisi nilai (ditunjukkan oleh titik dua). Sesuatu seperti f:t:v
mengatakan bahwa -v
hanya akan ditafsirkan sebagai bendera.
opts
adalah tempat parameter saat ini disimpan. case
pernyataan adalah tempat Anda akan memproses ini.
${OPTARG}
berisi nilai yang mengikuti parameter. ${FROM_VAL}
misalnya akan mendapatkan nilai /home/kristoffer/test.png
jika Anda menjalankan skrip Anda seperti:
ocrscript.sh -f /home/kristoffer/test.png -t /home/kristoffer/test.txt
Seperti yang disarankan orang lain, jika ini adalah pertama kalinya Anda menulis skrip bash, Anda harus benar-benar membaca beberapa dasar. Ini hanya tutorial singkat tentang bagaimana getopts
berfungsi.
Argumen yang Anda berikan ke bashscript akan muncul di variabel $1
dan $2
dan $3
di mana nomor mengacu pada argumen. $0
adalah perintah itu sendiri.
Argumen dipisahkan oleh spasi, jadi jika Anda memberikan -from
dan -to
dalam perintah, mereka akan berakhir di variabel ini juga, jadi untuk ini:
./ocrscript.sh -from /home/kristoffer/test.png -to /home/kristoffer/test.txt
Anda akan mendapatkan:
$0 # ocrscript.sh
$1 # -from
$2 # /home/kristoffer/test.png
$3 # -to
$4 # /home/kristoffer/test.txt
Mungkin lebih mudah untuk menghilangkan -from
dan -to
, seperti:
ocrscript.sh /home/kristoffer/test.png /home/kristoffer/test.txt
Maka Anda akan memiliki:
$1 # /home/kristoffer/test.png
$2 # /home/kristoffer/test.txt
Sisi negatifnya adalah Anda harus menyediakannya dalam urutan yang benar. Ada pustaka yang dapat mempermudah penguraian argumen bernama pada baris perintah, tetapi biasanya untuk skrip shell sederhana Anda sebaiknya menggunakan cara yang mudah saja, jika tidak ada masalah.
Maka Anda dapat melakukan:
/usr/local/bin/abbyyocr9 -rl Swedish -if "$1" -of "$2" 2>&1
Tanda kutip ganda di sekitar $1
dan $2
tidak selalu diperlukan tetapi disarankan, karena beberapa string tidak akan berfungsi jika Anda tidak menempatkannya di antara tanda kutip ganda.
Gunakan variabel "$1"
, "$2"
, "$3"
dan seterusnya untuk mengakses argumen. Untuk mengakses semuanya, Anda dapat menggunakan "[email protected]"
, atau untuk mendapatkan jumlah argumen $#
(mungkin berguna untuk memeriksa terlalu sedikit atau terlalu banyak argumen).
Saya perlu memastikan bahwa skrip saya sepenuhnya portabel di antara berbagai mesin, shell, dan bahkan versi cygwin. Selanjutnya, kolega saya yang harus saya tulis skripnya, adalah pemrogram, jadi saya akhirnya menggunakan ini:
for ((i=1;i<=$#;i++));
do
if [ ${!i} = "-s" ]
then ((i++))
var1=${!i};
elif [ ${!i} = "-log" ];
then ((i++))
logFile=${!i};
elif [ ${!i} = "-x" ];
then ((i++))
var2=${!i};
elif [ ${!i} = "-p" ];
then ((i++))
var3=${!i};
elif [ ${!i} = "-b" ];
then ((i++))
var4=${!i};
elif [ ${!i} = "-l" ];
then ((i++))
var5=${!i};
elif [ ${!i} = "-a" ];
then ((i++))
var6=${!i};
fi
done;
Rasional:Saya menyertakan launcher.sh
skrip juga, karena seluruh operasi memiliki beberapa langkah yang semu independen satu sama lain (saya mengatakan "semu", karena meskipun setiap skrip dapat dijalankan sendiri, biasanya semuanya dijalankan bersama), dan dalam dua hari saya menemukan, bahwa sekitar setengah dari kolega saya, menjadi pemrogram dan semuanya, terlalu baik untuk menggunakan file peluncur, mengikuti "penggunaan", atau membaca BANTUAN yang ditampilkan setiap kali mereka melakukan kesalahan dan mereka membuat mengacaukan semuanya, menjalankan skrip dengan argumen dalam urutan yang salah dan mengeluh bahwa skrip tidak berfungsi dengan baik. Menjadi orang yang mudah tersinggung, saya memutuskan untuk merombak semua skrip saya untuk memastikan bahwa skrip itu tahan terhadap rekan kerja. Segmen kode di atas adalah yang pertama.