Saya memiliki skrip Bash yang melakukan tindakan berdasarkan nilai variabel. Sintaks umum dari pernyataan kasus adalah:
case ${command} in
start) do_start ;;
stop) do_stop ;;
config) do_config ;;
*) do_help ;;
esac
Saya ingin menjalankan rutinitas default jika tidak ada perintah yang diberikan, dan do_help
jika perintah tersebut tidak dikenali. Saya mencoba menghilangkan nilai kasus sebagai berikut:
case ${command} in
) do_default ;;
...
*) do_help ;;
esac
Hasilnya bisa ditebak, saya kira:
syntax error near unexpected token `)'
Lalu saya mencoba menggunakan regex:
case ${command} in
^$) do_default ;;
...
*) do_help ;;
esac
Dengan ini, yang kosong ${command}
jatuh ke dalam *
kasus ini.
Apakah saya mencoba melakukan yang tidak mungkin?
Jawaban:
Itu
case
pernyataan menggunakan gumpalan, tidak regexes, dan bersikeras pertandingan yang tepat.Jadi string kosong ditulis, seperti biasa, seperti
""
atau''
:case "$command" in "") do_empty ;; something) do_something ;; prefix*) do_prefix ;; *) do_other ;; esac
sumber
something|'') do_something ;;
Saya menggunakan jatuh sederhana. tidak ada parameter yang lewat ($ 1 = "") yang akan ditangkap oleh pernyataan kasus kedua, namun * berikut ini akan menangkap parameter yang tidak diketahui. Membalik "") dan *) tidak akan berfungsi karena *) akan menangkap semuanya setiap saat, bahkan kosong.
#!/usr/local/bin/bash # testcase.sh case "$1" in abc) echo "this $1 word was seen." ;; "") echo "no $1 word at all was seen." ;; *) echo "any $1 word was seen." ;; esac
sumber
Inilah cara saya melakukannya (untuk masing-masing milik mereka):
#!/bin/sh echo -en "Enter string: " read string > finder.txt echo "--" >> finder.txt for file in `find . -name '*cgi'` do x=`grep -i -e "$string" $file` case $x in "" ) echo "Skipping $file"; ;; *) echo "$file: " >> finder.txt echo "$x" >> finder.txt echo "--" >> finder.txt ;; esac done more finder.txt
Jika saya mencari subrutin yang ada di satu atau dua file dalam sistem file yang berisi lusinan file cgi, saya memasukkan istilah pencarian, misalnya 'ssn_format'. bash memberikan saya hasil dalam file teks (finder.txt) yang terlihat seperti ini:
- ./registry/master_person_index.cgi: SQLClinic :: Keamanan :: ssn_format ($ user, $ script_name, $ local, $ Local, $ ssn) if $ ssn ne "";
sumber