Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 4
- 2036
- 395
- Noah Torp
Meneruskan siri kami mengenai petua dan trik baris perintah bash berguna, dalam artikel hari ini, kami akan meneroka Grepping hanya apa yang anda perlukan, dan bermula dengan primer PWD
dan bagaimana untuk menemui jalan skrip bermula dari.
Dalam tutorial ini anda akan belajar:
- Petua, cara dan kaedah baris perintah bash berguna
- Cara berinteraksi dengan baris perintah bash dengan cara yang lebih maju
- Cara Mengasah Kemahiran Bash Anda secara keseluruhan dan menjadi pengguna bash yang lebih mahir
Keperluan perisian dan konvensyen yang digunakan
Kategori | Keperluan, konvensyen atau versi perisian yang digunakan |
---|---|
Sistem | Pengedaran linux-bebas |
Perisian | Baris perintah bash, sistem berasaskan linux |
Yang lain | Sebarang utiliti yang tidak termasuk dalam shell bash secara lalai boleh dipasang menggunakan sudo apt-get memasang nama utiliti (atau pemasangan yum untuk sistem berasaskan redhat) |
Konvensyen | # - memerlukan komando linux untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah$-Memerlukan komando linux untuk dilaksanakan sebagai pengguna yang tidak istimewa |
Contoh 1: Direktori Kerja Laluan? Atau tidak?
Kami mungkin biasa memanggil PWD
Di baris arahan untuk memberitahu kami nama direktori semasa kami:
$ pwd/home/roel/ruang kerja
Tetapi jika kita ingin mendapatkan direktori dari mana skrip dimulakan, menggunakan pembolehubah ini dari skrip juga berfungsi dengan cara yang sama?
$ CAT TEST_PWD.sh #!/bin/bash my_path1 = "$ pwd" echo "$ my_path1" my_path2 = "$ (pwd)" echo "$ my_path2"
Salinan Kami akan menggunakan dua cara untuk mendapatkan jalan: kami melihat (untuk yang pertama My_path1
tugasan) di PWD
(Tahap OS) Pembolehubah Preset secara automatik, dan dalam kes kedua (untuk yang kedua My_path2
tugasan) Kami melaksanakan PWD
dalam subshell ($ (...)
) dan berikannya ke My_path2
. Mari melaksanakannya sama:
$ ./test_pwd.SH/Home/Roel/Workspace/Home/Roel/Workspace
Nampak baik, betul? Ya, mungkin, tetapi apabila kita berubah menjadi direktori yang berbeza, dan panggil skrip dengan menggunakan nama jalur penuh atau relatif, PWD
pemboleh ubah (atau PWD
perintah) di dalam skrip akan mengembalikan direktori yang kita ada ketika skrip dimulakan. Mari sahkan ini:
$ mkdir ujian $ ujian cd $ ... /test_pwd.sh/rumah/roel/ruang kerja/ujian/rumah/roel/ruang kerja/ujian
Apa yang dapat kita lihat di sini ialah PWD
(atau $ Pwd
pemboleh ubah) akan selalu mengembalikan laluan semasa yang sebenarnya.
Ini mungkin menjadi isu: kita mungkin mahu memulakan subskrip, atau mengakses fail, dari dalam direktori yang sama (atau subdirektori daripadanya) sebagai tempat di mana skrip itu masuk. Ini sering berlaku untuk skrip bash yang lebih kompleks yang memanggil beberapa subskrip dan/atau fail data dan konfigurasi.
Oleh itu, apakah cara seragam untuk mendapatkannya jalan dari mana skrip dimulakan?
Seseorang boleh mempertimbangkan menggunakan Dirname "\ $ 0"
Perintah:
$ CAT TEST2.sh #!/bin/bash echo "\ $ 0" dirname "\ $ 0"
Salinan Dirname akan menghasilkan - nama direktori relatif dari mana -mana pilihan yang diserahkan kepadanya, dan dalam kes ini \ $ 0
- pemboleh ubah khas yang ditetapkan apabila skrip bermula dengan nama skrip kerana ia dimulakan. Mari mengujinya:
$ ./test2.sh ./test2.sh . $ cd ujian $ ... /test2.sh ... /test2.SH…
Lebih baik, saya rasa, dan ia boleh membantu sedikit (untuk mendapatkan idea terutamanya), tetapi ia masih tidak menghasilkan kita dengan nama laluan yang berkelayakan sepenuhnya. Untuk ini, kita boleh menggunakan pembungkus subshell berganda di sekitar Dirname
dalam kombinasi dengan laluan berkelayakan penuh yang diperoleh dari a PWD
Pelaksanaan:
$ CAT Make_it_work.sh #!/bin/bash my_path = "$ (cd" $ (dirname "\ $ 0") "&& pwd)" echo "$ my_path"
Salinan Mari kita lihat sama ada ia berfungsi:
$ ./make_it_work.SH/Home/Roel/Ruang Kerja
Setakat ini begitu baik, tetapi adakah ia berfungsi apabila anda menjalankannya dari subdirektori?
$ cd test && pwd/home/roel/workspace/test $ .../make_it_work.sh/home/roel/ruang kerja $/rumah/roel/ruang kerja/make_it_work.SH/Home/Roel/Ruang Kerja
Ya!
Kami mula -mula berubah menjadi ujian
dan mengesahkan bahawa kami berada di ujian
Direktori, jika itu perubahan direktori (CD
) Perintah berjaya (seperti yang diarahkan oleh &&
).
Dalam kedua -dua kes - sama ada ia dipanggil secara relatif (... /
), atau dengan nama laluan yang berkelayakan sepenuhnya (/rumah/roel/ruang kerja/
), hasilnya ialah kita melihat direktori dari mana skrip dimulakan (/rumah/roel/ruang kerja/
) dan bukan direktori kerja semasa sebenar, atau PWD (/rumah/roel/ruang kerja/ujian
).
Ringkasnya, anda boleh menggunakan My_path = "$ (cd" $ (dirname "\ $ 0") "&& pwd)"
Skrip satu-liner untuk mendapatkan nama direktori yang betul, berkelayakan sepenuhnya dari dalam skrip anda. Selepas ini, menggunakan penambahan relatif akan berfungsi dengan baik. Contohnya, anda boleh menggunakan $ My_path/termasuk/mysubscript.sh
Dan bahkan $ My_path /... /one_dir_up_file.txt
dan lain-lain.
Contoh 2: Memperkenalkan hanya apa yang anda perlukan
Adakah anda pernah menggunakan grep
? GREP adalah utiliti baris perintah bash serba boleh yang membolehkan anda memilih teks dari fail dengan mudah. Kebanyakan masa ia digunakan seperti berikut:
Talian Ujian Cat 1 Line My Line 2 Line Your Line 3 Line kami $ GREP 'LINE 2' Talian 2 baris anda
Kami mempunyai fail input dengan 3 baris, dan kami mencari ujian tertentu (baris 2
) dalam fail itu. Tetapi bagaimana pula jika anda hanya mahukan garis yang mempunyai pelbagai garis
(i.e. garis
) disebutkan di dalamnya? Dan, bagaimana jika anda hanya mahu mempunyai perkataan sebelum ia termasuk garis
sedikit, tetapi bukan yang sebenarnya garis x
pengeluaran?
Dalam hal ini, kita dapat hanya untuk apa yang kita perlukan menggunakannya -o
('Hanya') Pilihan untuk Grep:
$ grep -o 'lines' lines $ grep -o '\ w \+ lines' menguji baris anda
Bingo! Kami mula -mula menyusu hanya perkataan 'garis', yang dijumpai. Kami kemudian mengutamakannya dengan ruang, dan ungkapan biasa yang menyatakan dalam teks pseudo: Cari sempadan perkataan (\ w
), sekurang -kurangnya sekali dan banyak kali yang berkenaan (\+
) diikuti dengan ruang. Hasilnya ialah anda
(yang mempunyai dua sempadan perkataan; permulaan dan akhir) dimasukkan. baris 2
tidak termasuk. Walaupun ia mempunyai sempadan perkataan, tidak ada akhiran garis
kepada yang satu.
Sekiranya anda ingin mengetahui lebih lanjut mengenai ungkapan biasa di Bash, sila lihat Bash Regexps untuk pemula dengan contoh, Advanced Bash Regex dengan contoh dan anda juga mungkin menyukai ungkapan biasa Python yang berkaitan dengan contoh.
Kesimpulan
Dalam artikel ini, kami meneroka PWD
dan melihat cara menggunakan PWD
dari dalam skrip dalam kombinasi dengan Dirname
untuk mendapatkan laluan direktori yang berkelayakan sepenuhnya dari mana skrip dimulakan, dengan cara yang akan selalu berfungsi. Kami juga melihat grepping hanya apa yang kita perlukan menggunakan -o
pilihan dan, dalam kes ini, ungkapan biasa untuk memadankan sempadan perkataan.
Tinggalkan kami komen dengan petua dan cara baris perintah bash terbaik anda!
- Contoh Petua dan Trik Perintah Bash Berguna - Bahagian 1
- Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 2
- Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 3
- Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 4
- Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 5
Tutorial Linux Berkaitan:
- Pengenalan kepada Automasi, Alat dan Teknik Linux
- Menguasai Gelung Skrip Bash
- Contoh Petua dan Trik Perintah Bash Berguna - Bahagian 1
- Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 3
- Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 2
- Perkara yang hendak dipasang di Ubuntu 20.04
- Gelung bersarang dalam skrip bash
- Ubuntu 20.04 Trik dan Perkara yang Anda Tidak Tahu
- Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 5
- Ubuntu 20.04 Panduan
- « Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 3
- Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 5 »