Berbagi teknologi

[Linux] [Shell] [Variabel Shell] dijelaskan secara detail

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina


1. Variabel lokal

  • Tentukan variabel Shell, nama variabel tidak perlu ditambahkan$
  • variabel lokalHanya valid selama masa pakai shell pengguna saat ini

2. Definisi variabel

  • Persyaratan nama variabel: Terdiri dari huruf, angka, dan garis bawah.
  • Nama variabel sangat peka huruf besar-kecil

3. Dapatkan nilai variabel

  • apostrof: Apa yang Anda lihat adalah apa yang Anda dapatkan, kutipan yang kuat
  • Kutipan ganda: Keluarkan semua konten dalam tanda kutip, identifikasi simbol khusus, referensi lemah
  • Tidak ada tanda kutip: Simbol kontinu bisa tanpa tanda kutip. Jika ada spasi, akan ada ambiguitas.
  • mundur: Referensi hasil eksekusi perintah, sama dengan$()Penggunaan

4.Variabel khusus

  • Variabel khusus shell, digunakan dalam skrip dan fungsi untuk meneruskan parameter.

  • Ada variabel parameter posisi khusus berikut:

    variabelmemengaruhi
    $0Dapatkan nama file skrip shell dan jalur skrip
    $nDapatkan parameter ke-n dari skrip shell. n adalah antara 1 dan 9. Jika lebih besar dari 9, beberapa{},menyukai{$10}
    $#Dapatkan jumlah total parameter di balik skrip shell yang dijalankan
    $*Dapatkan semua parameter skrip shell, tanpa tanda kutip, itu setara dengan$@Fungsinya, ditambah tanda kutip "$*", adalahMenerima semua parameter sebagai satu string
    $@Tanpa tanda kutip, efeknya sama seperti di atasTerima semua parameter sebagai string independen

5.Variabel keadaan khusus

  • Metode pencarianman bash,mencariSpecial Parameters

    variabelmemengaruhi
    $?Nilai kembalian status eksekusi perintah terakhir, 0 benar, bukan 0 gagal
    $$Nomor proses skrip shell saat ini
    $!PID dari proses latar belakang terakhir
    $_Dapatkan parameter terakhir dari perintah terakhir

6. Perintah variabel bawaan shell

1.gema

  • parameter
    • -n: Menampilkan konten tanpa jeda baris
    • -e: Menafsirkan karakter escape
      • n: garis baru
      • r: Memasuki
      • t: tab
      • b:menghapus
      • v: Karakter tab vertikal

2.evaluasiuasi

  • Fungsi:Jalankan beberapa perintah
  • Contoheval ls; cd ~

3.eksekutif

  • Fungsi: Jangan membuat proses anak dan menjalankan perintah selanjutnya.execSetelah eksekusi, secara otomatisexit

7. Mencegat tali

  • tata bahasa

    tata bahasamemengaruhi
    #Hapus kecocokan terpendek dari awal
    ##Hapus kecocokan terpanjang dari awal
    %Hapus kecocokan terpendek dari akhir
    %%Hapus kecocokan terpanjang dari akhir
    #Intersepsi konten karakter tertentu
    a*cCocok dengan string yang dimulai dengan a, sejumlah karakter di tengah, dan diakhiri dengan c
    ${变量}Kembalikan nilai variabel
    ${#变量}Kembalikan panjang variabel, panjang karakter
    ${变量:start}Mengembalikan karakter setelah nilai offset variabel
    ${变量:start:length}Ekstrak karakter yang dibatasi panjangnya setelah offset
    ${变量#word}Dari awal variabel, hapus substring kata terpendek yang cocok
    ${变量##word}Dari awal variabel, hapus kata yang paling cocok
    ${变量%word}Hapus substring kata terpendek yang cocok dari akhir variabel
    ${变量%%word}Hapus substring kata terpanjang yang cocok dari akhir variabel
    ${变量/pattern/string}Ganti pola pencocokan pertama dengan string
    ${变量//pattern/string}Ganti semua pola dengan string
  • Contoh operasi: Hapus nama file

    # 通过⼦串的替换⽅式
    snowk@SnowKYP# f=stu_102999_1_finished.jpg
    
    # 变量的⼦串功能,去掉后缀
    snowk@SnowKYP# echo ${f//_finished/}
    stu_102999_1.jpg
    
    # 利⽤变量的反引⽤替换⽂件名
    snowk@SnowKYP# mv $f `echo ${f//_finished/}`
    
    # 剩下的⽂件,利⽤循环操作
    # 找出剩下所有需要替换的jpg⽂件
    snowk@SnowKYP# ls *fin*.jpg
    stu_102999_2_finished.jpg stu_102999_3_finished.jpg stu_102999_4_finished.jpg
    stu_102999_5_finished.jpg
    
    # 写shell循环代码,循环操作
    # 去掉所有jpg⽂件的_finished后缀
    snowk@SnowKYP# for file in `ls *fin*.jpg`;do mv $file `echo ${file//_finished/}`;done
    
    snowk@SnowKYP# ls *.jpg
    stu_102999_1.jpg stu_102999_2.jpg stu_102999_3.jpg stu_102999_4.jpg stu_102999_5.jpg
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

8. Pemrosesan variabel ekspansi shell khusus

1. Tata Bahasa

  • Fungsi: Keempat variabel yang diperluas ini semuanya termasuk dalam penilaian dan pemrosesan nilai variabel.
  • tata bahasaparameter,参数,范围
    • ${parameter:-word}:jikaparameterNilai variabel kosong, kembalikanwordrangkaian
    • ${parameter:=word}:jikaparameterNilai variabelnya kosongwordMenggantikan nilai variabel dan mengembalikan nilainya
    • ${parameter:?word}:jikaparameterNilai variabel kosong,wordsebagaistderrKeluaran, jika tidak, keluarkan nilai variabel
      • Digunakan untuk mengembalikan pesan kesalahan ketika terjadi kesalahan karena pengaturan variabel menjadi kosong.
    • ${parameter:+word}:jikaparameterJika nilai variabel kosong, jangan lakukan apa pun, sebaliknyawordkembali

2. Skenario penerapan

  • Cadangan data, skrip untuk menghapus data kedaluwarsa
    # 原脚本命令,有bug,有歧义
    find ${file_path} -name '*.tar.gz' -type f -mtime +7 | xargs rm -f
    
    # 修正后的脚本命令
    # 如果有bug起义,就在当前目录搜索并执行删除
    find ${file_path:=/tmp} -name '*.tar.gz' -type f -mtime +7 | xargs rm -f
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6