Saya ingin memasukkan nilai (string) pada skrip saya yang akan saya baca dari file teks.
Misalnya, alih-alih:
echo "Enter your name"
read name
Saya ingin membaca string dari file teks lain sehingga penerjemah harus membaca string dari file dan bukan input pengguna.
KEY=VALUE
berpasangan? Solusinya sangat berbeda (jika itu yang terakhir, jawaban Takkat berlaku, mantan Radu)Jawaban:
Untuk membaca variabel dari file, kita dapat menggunakan perintah
source
atau.
.Mari kita asumsikan file tersebut berisi baris berikut
kita dapat mengimpor variabel ini menggunakan
sumber
<filename>
akan berjalan di shell Anda, sepertirm -rf /
, yang bisa sangat berbahaya.sed
untuk menambahkanlocal
kata kunci dan membuat skrip sedikit lebih aman dan tidak mencemari ruang lingkup global Anda. Jadi di dalam fungsi lakukancat global_variables.sh | sed -e 's/^/local /' > local_variables.sh
dan kemudian gunakan. ./local_variables.sh
. Apa pun yang Anda impor di fungsi hanya akan tersedia di fungsi itu. Perhatikan bahwa asumsiglobal_variables.sh
hanya berisi satu variabel per baris.Mengingat bahwa Anda ingin semua konten file teks Anda disimpan dalam variabel Anda, Anda dapat menggunakan:
Atau, dalam bash murni:
sumber
echo $name
. Saya menggunakannya hanya untuk tes. Selanjutnya Anda dapat menggunakan$name
variabel untuk memproses lebih lanjut di mana saja Anda inginkan dalam skrip Anda.$name
variabel adalah string dari file Anda yang ditetapkan menggunakancat $file
perintah. Apa yang tidak jelas atau sulit dipahami?$file
variabel terpisah jika Anda hanya menggunakannya satu kali untuk memuat$name
variabel, cukup gunakancat /path/to/file
Dari dalam skrip Anda, Anda dapat melakukan ini:
Anda bahkan dapat melakukan ini berkali-kali misalnya dalam satu lingkaran
sumber
Salah satu cara alternatif untuk melakukan ini adalah dengan hanya mengarahkan input standar ke file Anda, di mana Anda memiliki semua input pengguna dalam urutan yang diharapkan oleh program. Misalnya, dengan program (disebut
script.sh
)dan file input (disebut
input.in
)Anda dapat menjalankan ini dari terminal dengan salah satu dari dua cara berikut:
dan itu akan setara dengan hanya menjalankan skrip dan memasukkan data secara manual - itu akan mencetak baris "Halo Tomas. Anda berusia 26 tahun, kan?".
Sebagai Radu Rădeanu telah sudah menyarankan , Anda bisa menggunakan
cat
dalam naskah Anda untuk membaca isi file ke dalam avariable - dalam hal ini, Anda perlu setiap file berisi hanya satu baris, dengan hanya nilai yang Anda inginkan untuk variabel tertentu. Dalam contoh di atas, Anda akan membagi file input menjadi satu dengan nama (misalnya,name.in
) dan satu dengan usia (katakanlah,age.in
), dan mengubahread name
danread age
baris untukname=$(cat name.in)
danage=$(cat age.in)
masing-masing.sumber
vh=$(awk "NR==3 {print;exit}" /var/www/test.txt)
. Anda kemudian akan memiliki string disimpan dalam variabel$vh
, sehingga Anda dapat menggunakannya seperti:mkdir "/var/www/$vh"
- ini akan membuat folder dengan nama yang ditentukan di dalam / var / www.Saya menemukan solusi yang berfungsi di sini: https://af-design.com/2009/07/07/loading-data-into-bash-variables/
sumber
Dari
man bash:1785
, substitusi perintah ini setara denganname=$(cat "$file")
tetapi lebih cepat.sumber
Jawaban singkat:
sumber
Jika Anda ingin menggunakan banyak string, Anda bisa menggunakan:
ATAU
Jika Anda ingin pengguna menunjukkan file
sumber
sumber
Saya menggunakan ini untuk mendapatkan variabel tunggal dari file
Ketika
GET_VAR
tidak ditemukan di${FILE}
dalamnya akan kosong daripada menyebabkan kesalahan berkat|| true
.Ini menggunakan
grep -P
yang ada di GNU grep tetapi tidak default di semua grep pada saat penulisan ini.sumber