Saya perlu membuat skrip shell yang memeriksa keberadaan file dan jika tidak ada, buat dan pindah ke perintah berikutnya, atau hanya pindah ke perintah berikutnya. Apa yang saya miliki tidak melakukan itu.
#!/bin/bash
# Check for the file that gets created when the script successfully finishes.
if [! -f /Scripts/file.txt]
then
: # Do nothing. Go to the next step?
else
mkdir /Scripts # file.txt will come at the end of the script
fi
# Next command (macOS preference setting)
defaults write ...
Kembali adalah
line 5: [!: command not found
mkdir: /Scripts: File exists
Tidak tahu apa yang harus dilakukan. Setiap tempat pencarian Google membawa saya menunjukkan sesuatu yang berbeda.
bash
shell-script
osx
jrw
sumber
sumber
touch
file dan melewati persyaratan?[
dan!
), tetapi mungkin membantu untuk menunjukkan di sini bahwa[
ini adalah perintah aktual di Unix. Perintah Unix membutuhkan spasi kosong antara nama perintah dan argumennya. Ya, itu juga Bash bawaan , tetapi ada juga biner di/usr/bin/[
sebagian besar sistem.Jawaban:
Solusi yang mungkin lebih sederhana, tidak perlu melakukan tes eksplisit, cukup gunakan:
Jika Anda tidak ingin waktu "modifikasi" yang sudah
file.txt
ada diubahtouch
, Anda dapat menggunakantouch -a /Scripts/file.txt
untuktouch
hanya mengubah waktu "akses" dan "perubahan".sumber
>>/Scripts/file.txt
. Ini akan membuka file untuk ditambahkan dan membuatnya jika tidak ada.Anda mendapatkan kesalahan karena tidak ada ruang di antara
[
dan!
namun ada juga beberapa kekurangan dalam kode Anda. Pertama, Anda memeriksa apakah file tersebut tidak ada, dan jika tidak, Anda tidak melakukan apa-apa. Jika file TIDAK ADA Anda membuat direktori (tetapi tidak melakukan apa pun untuk membuat file).Anda juga tidak perlu operasi nol, Anda harus dapat melakukan:
Ini memeriksa jika
/Scripts/file.txt
tidak ada itu akan membuat/Scripts
direktori danfile.txt
file. Anda juga dapat memeriksa keberadaan direktori secara terpisah jika diinginkan. Selain itu perhatikan saya menggunakan-e
bukan-f
karena Anda diminta hanya untuk memeriksa keberadaan file yang-e
akan dilakukan di mana-f
memeriksa bahwa itu adalah "file biasa" http://tldp.org/LDP/abs/html/fto. htmlsumber
Untuk mulai dengan, skrip shell bukan skrip bash , jadi mari kita buat kode Anda lebih umum:
Setiap sistem Posix harus memiliki file itu; bash sangat opsional.
Tidak perlu menguji apakah direktori itu ada, cukup
Untuk membuat file jika tidak ada,
Atau jika Anda lebih suka,
sumber
Anda memiliki kesalahan sintaksis. Anda memerlukan spasi sebelum dan sesudah
[
dan]
.sumber
Di atas mengasumsikan bahwa tidak ada "trik" seperti membuat direktori yang disebut
/Scripts/file.txt
(yang bisa menjadi cara memaksa skrip untuk selalu memasukkan cabang if). Jika "file" adalah direktori, tes -f akan gagal dan perintah sentuh tidak akan mengubah apa pun.sumber
pendekatan saya
keluaran
.
sumber
touch
danmkdir -p