I'm mencoba untuk membuat shell script yang harus digunakan seperti ini:
ocrscript.sh -from /home/kristoffer/test.png -to /home/kristoffer/test.txt
Naskah ini kemudian akan ocr mengkonversi file gambar ke file teks. Berikut adalah apa yang saya telah datang dengan sejauh ini:
#!/bin/bash
export HOME=/home/kristoffer
/usr/local/bin/abbyyocr9 -rl Swedish -if ???fromvalue??? -of ???tovalue??? 2>&1
Tapi aku don't tahu bagaimana untuk mendapatkan dari
dan ke
nilai-nilai. Setiap ide-ide tentang bagaimana untuk melakukannya?
Argumen yang anda berikan ke bashscript akan muncul dalam variabel $1
dan $2
dan $3
di mana jumlah tersebut mengacu pada argumen. $0
adalah perintah itu sendiri.
Argumen yang dipisahkan oleh spasi, jadi jika anda akan memberikan dari
dan ke
dalam perintah, mereka akan berakhir di variabel tersebut 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 akan lebih mudah untuk menghilangkan dari
dan ke
, seperti:
ocrscript.sh /home/kristoffer/test.png /home/kristoffer/test.txt
Kemudian anda'll memiliki:
$1 # /home/kristoffer/test.png
$2 # /home/kristoffer/test.txt
The downside adalah bahwa anda'll harus menyediakan itu dalam urutan yang benar. Ada perpustakaan yang dapat membuat lebih mudah untuk mengurai bernama argumen pada command line, tapi biasanya untuk simple shell script anda hanya harus menggunakan cara yang mudah, jika itu's tidak ada masalah.
Maka yang dapat anda lakukan:
/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 won't bekerja jika anda don't menempatkan mereka di antara tanda kutip ganda.
Jika anda're tidak benar-benar melekat untuk menggunakan "dari" dan "untuk" sebagai pilihan anda nama, it's cukup mudah untuk menerapkan ini menggunakan getopts:
while getopts f:t: opts; do
case ${opts} in
f) FROM_VAL=${OPTARG} ;;
t) TO_VAL=${OPTARG} ;;
esac
done
getopts
adalah sebuah program yang memproses argumen baris perintah dan mudah mem-parsing mereka untuk anda.
f:t:
menetapkan bahwa anda're mengharapkan 2 parameter yang mengandung nilai-nilai (yang ditunjukkan oleh usus besar). Sesuatu seperti f:t:v
mengatakan bahwa -v
hanya akan ditafsirkan sebagai bendera.
memilih
adalah di mana saat ini parameter disimpan. Kasus
pernyataan adalah di mana anda akan proses ini.
${OPTARG}
berisi nilai berikut parameter. ${FROM_VAL}
misalnya akan mendapatkan nilai /home/kristoffer/tes.png
jika anda menjalankan script anda seperti:
ocrscript.sh -f /home/kristoffer/tes.png -t /home/kristoffer/test.txt
Seperti yang lain menyarankan, jika ini adalah pertama kalinya anda menulis script bash anda harus benar-benar membaca tentang beberapa dasar-dasar. Ini adalah tutorial singkat tentang bagaimana getopts
bekerja.
Menggunakan variabel "$1"
, "$2"
, "$3"
dan sebagainya untuk mengakses argumen. Untuk mengakses semua dari mereka anda dapat menggunakan "$@"
, atau untuk mendapatkan jumlah dari argumen $#
(mungkin akan berguna untuk memeriksa terlalu sedikit atau terlalu banyak argumen).
Aku yang diperlukan untuk memastikan bahwa script saya sepenuhnya portabel antara berbagai mesin, kerang dan bahkan cygwin versi. Lebih lanjut, rekan-rekan saya yang adalah orang-orang yang saya harus menulis script untuk, programer, jadi akhirnya saya 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;
Alasan: saya termasuk launcher.sh
script juga, karena seluruh operasi memiliki beberapa langkah-langkah yang sok independen satu sama lain (I'm mengatakan "kuasi", karena meskipun masing-masing script bisa berjalan sendiri, mereka biasanya semua berjalan bersama-sama), dan dalam dua hari saya menemukan, bahwa sekitar setengah dari rekan-rekan saya, menjadi programmer dan semua, terlalu baik untuk menggunakan peluncur file, ikuti "penggunaan", atau baca BANTUAN yang ditampilkan setiap kali mereka melakukan sesuatu yang salah dan mereka membuat berantakan semuanya, menjalankan script dengan argumen dalam urutan yang salah dan mengeluh bahwa script didn't bekerja dengan benar. Menjadi mudah tersinggung saya memutuskan untuk merombak semua script saya untuk memastikan bahwa mereka adalah rekan-bukti. Segmen kode di atas adalah hal pertama.
Di bash $1
adalah argumen pertama diteruskan ke script, $2
kedua dan seterusnya
/usr/local/bin/abbyyocr9 -rl Swedish -if "$1" -of "$2" 2>&1
Sehingga anda dapat menggunakan:
./your_script.sh some_source_file.png destination_file.txt
Penjelasan tentang tanda kutip ganda;
mempertimbangkan tiga script:
# foo.sh
bash bar.sh $1
# cat foo2.sh
bash bar.sh "$1"
# bar.sh
echo "1-$1" "2-$2"
Sekarang memohon:
$ bash foo.sh "a b"
1-a 2-b
$ bash foo2.sh "a b"
1-a b 2-
Ketika anda memanggil foo.sh "b"
kemudian memanggil bar.sh a b
(dua argumen), dan dengan foo2.sh "b"
itu memanggil bar.sh "b"
(1 argumen). Selalu ada dalam pikiran bagaimana parameter berlalu dan expaned di bash, itu akan menghemat banyak sakit kepala.