Bir if if ifadesinde birden çok koşulu birleştirmek ve kombinasyonu olumsuzlamak istiyorum. Koşulların basit bir kombinasyonu için aşağıdaki çalışma kodu var:
if [ -f file1 ] && [ -f file2 ] && [ -f file3 ] ; then
# do stuff with the files
fi
Bu iyi çalışıyor. Eğer bunu reddetmek istersem, aşağıdaki çalışma kodunu kullanabilirim:
if ! ( [ -f file1 ] && [ -f file2 ] && [ -f file3 ] ) ; then
echo "Error: You done goofed."
exit 1
fi
# do stuff with the files
Bu da beklendiği gibi çalışıyor. Ancak bana öyle geliyor ki parantezlerin aslında orada ne yaptığını bilmiyorum. Ben istiyorum sadece gruplandırmak için bunları kullanmak için, ama aslında bir altkabuk üretiyor? (Nasıl söyleyebilirim?) Öyleyse, bir alt kabuk ortaya çıkmadan koşulları gruplamanın bir yolu var mı?
if [[ ! -f file1 ]] && [[ ! -f file2 ]]; then
if [ ! 1 -eq 2 ] && [ ! 2 -eq 3 ]; then echo yep; five işe yarıyor. Her zaman alışkanlık olarak çift ayraçlı testler yazarım. Ayrıca, olmadığından emin olmak için bashdaha fazla test yaptım if /bin/test ! 1 -eq 2 && /bin/test ! 2 -eq 3 ; then echo yep; five bu şekilde de çalışıyor.
[ ! -e file/. ] && [ -r file ]dizinleri bırakır . İstediğiniz gibi reddedin. Tabii ki, işte -dböyle.
if ! [ -f file1 ] || ! [ -f file 2 ] || ! [ -f file3 ] ; thenama daha genel bir cevap istiyorum.