Contoh dan trik Contoh Tips Baris Bash Berguna - Bagian 4

Contoh dan trik Contoh Tips Baris Bash Berguna - Bagian 4

Melanjutkan seri kami tentang tips dan trik baris perintah bash yang berguna, dalam artikel hari ini, kami akan menjelajahi hanya grepping apa yang Anda butuhkan, dan mulai dengan primer on PWD dan bagaimana menemukan jalan dari sebuah naskah dimulai dari.

Dalam tutorial ini Anda akan belajar:

  • Tips, trik, dan metode baris perintah bash yang bermanfaat
  • Cara berinteraksi dengan baris perintah bash secara canggih
  • Cara mempertajam keterampilan bash Anda secara keseluruhan dan menjadi pengguna bash yang lebih mahir
Contoh dan trik Contoh Tips Baris Bash Berguna - Bagian 4

Persyaratan dan konvensi perangkat lunak yang digunakan

Persyaratan Perangkat Lunak dan Konvensi Baris Perintah Linux
Kategori Persyaratan, konvensi atau versi perangkat lunak yang digunakan
Sistem Distribusi Linux-independen
Perangkat lunak Baris perintah bash, sistem berbasis Linux
Lainnya Utilitas apa pun yang tidak termasuk dalam shell bash secara default dapat diinstal menggunakan sudo apt-get install-name utilitas (atau instalasi yum untuk sistem berbasis redhat)
Konvensi # - mengharuskan Linux -Commands untuk dieksekusi dengan hak istimewa root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo memerintah
$-mengharuskan Linux-Commands untuk dieksekusi sebagai pengguna biasa

Contoh 1: Direktori Kerja Path? Atau tidak?

Kami mungkin terbiasa menelepon PWD Di baris perintah untuk memberi tahu kami nama direktori kami saat ini:

$ pwd/home/roel/workspace 

Tetapi jika kita ingin mendapatkan direktori dari mana skrip dimulai, menggunakan variabel ini dari skrip juga bekerja dengan cara yang sama?

$ cat test_pwd.SH #!/bin/bash my_path1 = "$ pwd" echo "$ my_path1" my_path2 = "$ (pwd)" echo "$ my_path2" 
Menyalin

Kami akan menggunakan dua cara untuk mengambil jalan: kami melihat (untuk yang pertama My_path1 penugasan) di PWD (Level OS) secara otomatis menyajikan variabel, dan dalam kasus kedua (untuk yang kedua My_path2 tugas) kami mengeksekusi PWD di subshell ($ (...)) dan tetapkan ke My_path2. Mari kita jalankan hal yang sama:

$ ./test_pwd.sh/home/roel/workspace/home/roel/workspace 

Terlihat bagus, benar? Ya, mungkin, tetapi begitu kita berubah menjadi direktori yang berbeda, dan panggil skrip dengan menggunakannya nama jalur penuh atau relatif, PWD variabel (atau PWD perintah) di dalam skrip akan mengembalikan direktori tempat kami berada saat skrip dimulai. Mari kita verifikasi ini:

$ mkdir uji $ cd test $… /test_pwd.sh/home/roel/workspace/test/home/roel/workspace/test 

Yang bisa kita lihat di sini adalah itu PWD (atau $ Pwd variabel) akan selalu mengembalikan jalur saat ini yang sebenarnya.

Ini mungkin menjadi masalah: kami mungkin ingin memulai subskrip, atau mengakses file, dari dalam direktori yang sama (atau subdirektori itu) seperti yang ada di mana skrip berada di dalam. Ini sering terjadi pada skrip bash yang lebih kompleks yang memanggil beberapa subskrip dan/atau data dan file konfigurasi.

Jadi apa cara yang seragam untuk mendapatkan jalur dari mana naskah dimulai?

Seseorang dapat mempertimbangkan untuk menggunakan dirname "\ $ 0" memerintah:

$ Cat test2.SH #!/bin/bash echo "\ $ 0" Dirname "\ $ 0" 
Menyalin

Dirname akan menghasilkan - relatif - nama direktori dari opsi apa pun yang diteruskan ke sana, dan dalam hal ini \ $ 0 - variabel khusus yang diatur saat skrip mulai dengan nama skrip saat dimulai. Mari kita mengujinya:

$ ./test2.SH ./test2.SH . $ cd test $… /test2.sh… /test2.SH… 

Lebih baik, saya kira, dan mungkin sedikit membantu (untuk mendapatkan ide terutama), tetapi masih belum menghasilkan kita dengan nama pathname yang sepenuhnya memenuhi syarat. Untuk ini, kita dapat menggunakan pembungkus subshell ganda Dirname dalam kombinasi dengan jalur berkualitas penuh yang sebenarnya diperoleh dari a PWD eksekusi:

$ CAT MAKE_IT_WORK.SH #!/bin/bash my_path = "$ (cd" $ (dirname "\ $ 0") "&& pwd)" echo "$ my_path" 
Menyalin

Mari kita lihat apakah itu berhasil:

$ ./buat itu bekerja.sh/home/roel/workspace 

Sejauh ini bagus, tetapi apakah itu berhasil saat Anda menjalankannya dari subdirektori?

$ CD test && pwd/home/roel/workspace/test $…/make_it_work.sh/home/roel/workspace $/home/roel/workspace/make_it_work.sh/home/roel/workspace 

Ya!

Pertama -tama kita berubah menjadi tes dan verifikasi kami berada di tes direktori, jika itu mengubah direktori (CD) Perintah berhasil (seperti yang diperintahkan oleh &&).

Dalam kedua kasus - apakah itu disebut secara relatif (… /), atau dengan nama jalur yang sepenuhnya memenuhi syarat (/home/roel/workspace/), hasilnya adalah kita melihat direktori dari mana skrip dimulai (/home/roel/workspace/) dan bukan direktori kerja saat ini, atau PWD (/home/roel/workspace/test).

Singkatnya, Anda dapat menggunakan My_path = "$ (cd" $ (dirname "\ $ 0") "&& pwd)" Skrip One-Liner untuk mendapatkan nama direktori yang benar, memenuhi syarat, dari dalam skrip Anda. Setelah ini, menggunakan tambahan relatif akan bekerja dengan baik. Misalnya, Anda dapat menggunakan $ My_path/include/mysubscript.SH dan bahkan $ My_path /... /one_dir_up_file.txt dll.

Contoh 2: hanya grepping apa yang Anda butuhkan

Pernahkah Anda menggunakan grep? Grep adalah utilitas baris perintah bash serbaguna yang memungkinkan Anda memilih teks dari file dengan mudah. Sebagian besar waktu digunakan sebagai berikut:

$ Cat Test Line 1 My Line Line 2 Line Your Line 3 Line kami $ Grep 'Line 2' Test Line 2 Line Anda 


Kami memiliki file input dengan 3 baris, dan kami mencari tes tertentu (Baris 2) dalam file itu. Tapi bagaimana jika Anda hanya menginginkan garis yang memiliki kelipatan garis (Saya.e. baris) disebutkan di dalamnya? Dan, bagaimana jika Anda hanya ingin memiliki kata sebelum itu termasuk baris sedikit, tapi bukan yang sebenarnya baris x keluaran?

Dalam hal ini, kita hanya dapat menggunakan apa yang kita butuhkan menggunakan -Hai ('Only') opsi untuk grep:

$ grep -o 'lines' test line $ grep -o '\ w \+ lines' uji kalimat Anda 

Bingo! Kami pertama kali menyegarkan hanya untuk kata 'baris', yang ditemukan. Kami kemudian diawali dengan ruang, dan ekspresi reguler yang menyatakan di pseudo-text: temukan batas kata (\ w), setidaknya sekali dan sebanyak yang berlaku (\+) diikuti oleh ruang. Hasilnya adalah itu milikmu (yang memiliki dua batas kata; awal dan akhir) disertakan. Baris 2 tidak termasuk. Sementara itu memiliki batas kata, tidak ada akhiran baris untuk yang itu.

Jika Anda ingin mempelajari lebih lanjut tentang ekspresi reguler di Bash, silakan lihat Bash Regexps untuk pemula dengan contoh, canggih Bash Regex dengan contoh dan Anda mungkin juga menyukai ekspresi reguler Python semi-terkait dengan contoh.

Kesimpulan

Di artikel ini, kami menjelajahi PWD dan melihat cara menggunakan PWD dari dalam skrip dalam kombinasi dengan Dirname Untuk mengambil jalur direktori yang sepenuhnya memenuhi syarat dari mana skrip dimulai, dengan cara yang akan selalu berhasil. Kami juga hanya melihat Grepping apa yang kami butuhkan menggunakan -Hai opsi dan, dalam hal ini, ekspresi reguler untuk mencocokkan batas kata.

Tinggalkan kami komentar dengan tips dan trik baris perintah bash terbaik Anda!

  • Contoh dan trik Contoh Tips Baris Bash Berguna - Bagian 1
  • Contoh dan trik Contoh Tips Baris Bash Berguna - Bagian 2
  • Contoh dan trik Contoh Tips Baris Bash Berguna - Bagian 3
  • Contoh dan trik Contoh Tips Baris Bash Berguna - Bagian 4
  • Contoh dan trik Contoh Tip Baris Bash Berguna - Bagian 5

Tutorial Linux Terkait:

  • Pengantar Otomatisasi Linux, Alat dan Teknik
  • Menguasai loop skrip bash
  • Contoh dan trik Contoh Tips Baris Bash Berguna - Bagian 1
  • Contoh dan trik Contoh Tips Baris Bash Berguna - Bagian 3
  • Contoh dan trik Contoh Tips Baris Bash Berguna - Bagian 2
  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • Loop bersarang dalam skrip bash
  • Ubuntu 20.04 trik dan hal -hal yang mungkin tidak Anda ketahui
  • Contoh dan trik Contoh Tip Baris Bash Berguna - Bagian 5
  • Ubuntu 20.04 Panduan