GNU/Linux >> Belajar Linux >  >> Linux

Cara menyampaikan beberapa argumen untuk dieksekusi dengan skrip .sh

Metode termudah untuk membaca argumen dapat dijelaskan sebagai berikut;

Setiap argumen dirujuk dan diuraikan oleh $IFS atau saat ini mendefinisikan internal file separator . Karakter default adalah spasi.

Misalnya, ambil yang berikut ini; # ./script.sh arg1 arg2

Daftar argumen dalam contoh tersebut adalah arg1 = $1 dan arg2 = $2 yang dapat ditulis ulang sebagai arg1 arg2 = [email protected] .

Catatan lain adalah penggunaan daftar log, seberapa sering itu berubah? Asumsi saya adalah setiap hari. Mengapa tidak menggunakan output direktori sebagai larik loop berulang Anda? Misalnya;

for i in $(ls /path/to/logs); do
  ./workaround.sh $i;
done

Atau lebih baik lagi, gunakan functions di bash untuk menghilangkan kekacauan.

function process_file()
{
  # transfer file code/command
}

function iterate_dir()
{
  local -a dir=($(ls $1))
  for file in ${dir[@]}; do
    process_file $file
  done
}

iterate_dir /path/to/log/for

Meskipun ini hanyalah saran untuk meningkatkan pengetahuan skrip shell Anda, saya harus tahu jika ada kesalahan yang Anda dapatkan dan juga perlu mengetahui detail dari setiap kode dan atau fungsi skrip. Memanfaatkan -x argumen juga membantu men-debug skrip.

Jika Anda hanya mentransfer log, Anda mungkin ingin menghapus semua skrip dan menggunakan rsync , rsyslog atau syslog karena semuanya jauh lebih cocok untuk tugas yang dimaksud.


xargs -n 1 ./script.sh <list.txt

Dalam contoh ini, xargs akan mengeksekusi ./script.sh beberapa kali dengan satu argumen yang dibaca dari input standarnya.

Masukan standar berasal dari file list.txt melalui pengalihan input shell sederhana. Ini mengasumsikan bahwa list.txt file berisi satu argumen untuk digunakan dengan skrip per baris.

./script.sh skrip akan dieksekusi sekali untuk setiap baris di list.txt berkas.

Tentang -n tandai ke xargs

-n number

Panggil utilitas menggunakan sebanyak mungkin argumen input standar, hingga number (bilangan bulat desimal positif) argumenmaksimum.

Solusi lain adalah mengizinkan skrip untuk membaca langsung dari list.txt , atau mengambil beberapa argumen baris perintah (entri dari list.txt ), dan untuk mengunduh file dalam satu atau beberapa kumpulan. Namun karena kami tidak mengetahui mekanisme skripnya, saya tidak dapat memberikan penjelasan mendetail tentang cara melakukannya.


di dalam skrip:Anda memerlukan loop baca seperti while read ; do ......... ; done < filename untuk memperlakukan baris sebagai variabel $REPLY...

misalnya

while read 
do
mv $REPLY $REPLY.old
done < liste.txt

akan mengganti nama file apa pun dari dalam liste.txt menjadi filename.old

Anda memiliki struktur sekarang Anda dapat menyesuaikan dengan kebutuhan Anda tergantung pada apa yang Anda maksud dengan " di setiap nama file log di list.txt untuk dieksekusi." :)


Linux
  1. Bagaimana Cara Melewati Parameter Ke Alias?

  2. Lewati Argumen Baris Perintah ke Skrip Bash?

  3. Bagaimana Menangani Switch Dalam Script Shell?

  1. Bagaimana Mendapatkan Ls Untuk Mencantumkan Direktori Dengan Trailing Forward-slash?

  2. Jalankan Script Dengan Argumen Sebagai Pengguna?

  3. Cara membuat daftar domain dengan DNSSEC

  1. Cara menghapus \r karakter dengan sed

  2. Bagaimana cara meneruskan argumen ke skrip yang dipanggil oleh perintah sumber?

  3. Bagaimana cara menjalankan skrip bash?