GNU/Linux >> Belajar Linux >  >> Linux

Parameter skrip di Bash

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.


Linux
  1. Menambahkan argumen dan opsi ke skrip Bash Anda

  2. Bagaimana Cara Mengatur Parameter Saat Pipa Bash Script Ke Bash?

  3. Bagaimana cara meneruskan parameter ke skrip Bash?

  1. Mengapa cat /dev/urandom menggantung skrip bash saya?

  2. Bagaimana saya bisa menguji skrip Bash saya pada versi Bash yang lebih lama?

  3. Jalankan perintah bash pada pipa jenkins

  1. Mengapa meletakkan hal-hal selain /home ke partisi terpisah?

  2. Izin tulis pengguna SFTP yang di-chroot

  3. Haruskah situs web berada di /var/ atau /usr/ sesuai dengan penggunaan yang disarankan?