Shell Scripting-də məntiqi və ya əməliyyatın necə yerinə yetirilməsi

Sadə statusu yoxlamaq üçün çalışıram, amma işə yaramır.

$# 0 və ya 1dən böyüksə, salam deyin.

Aşağıdakı sintaksisini müvəffəqiyyətsiz sınamışam:

 if [ "$#" == 0 -o "$#" > 1 ] ; then echo "hello" fi if [ "$#" == 0 ] || [ "$#" > 1 ] ; then echo "hello" fi 
356
06 нояб. çiyələk təyin 06 Noyabr. 2010-11-06 04:48 '10 at 4:48 2010-11-06 04:48
@ 6 cavablar

Bu yaxşı işləməli.

 if [ "$#" == 0 ] || [ "$#" -gt 1 ] ; then echo "hello" fi 

Bunun digər kabuklarda fərqli olduğuna əmin deyiləm, amma <,> istifadə etmək istəyirsinizsə, onları cüt parantezlə aşağıdakı kimi qoymalısınız:

 if (("$#" > 1)) ... 
616
06 нояб. Cavab Coding rayonu Nov 06 tərəfindən verilir 2010-11-06 05:03 '10 at 5:03 2010-11-06 05:03

Bu kod mənim üçün işləyir:

 #!/bin/sh argc=$# echo $argc if [ $argc -eq 0 -o $argc -eq 1 ]; then echo "foo" else echo "bar" fi 

Şübhəsiz ki, "==" dəstəkləyir. Satırları müqayisə etmək üçün "=" istifadə edin və ints ilə müqayisə et.

border=0
 man test 

Daha ətraflı məlumat üçün.

41
06 нояб. cavab 06 noyabr. 2010-11-06 05:01 '10 saat 05:01 'da 2010-11-06 05:01

Bash exit kodu $ istifadə edirsiniz? dəyişən olaraq bunu etmək daha yaxşıdır:

 if [ $? -eq 4 -o $? -eq 8 ] ; then echo "..." fi 

Çünki bunu etsəniz:

 if [ $? -eq 4 ] || [ $? -eq 8 ] ; then 

VEYA sol hissəsi $ dəyişənini dəyişirmi ? Niyə OR- nin sağ hissəsi orijinal $ yoxdur? .

23
11 мая '15 в 12:45 2015-05-11 12:45 luca76 tərəfindən verilmiş cavab 11 may, '15 at 12:45 pm 2015-05-11 12:45

Bəzən ikiqat mötərizələrdən istifadə etməlisiniz, əksinə bir səhv alacaqsınız, məsələn, bir çox arqumentlər

 if [[ $OUTMERGE == *"fatal"* ]] || [[ $OUTMERGE == *"Aborting"* ]] then fi 
9
02 мая '16 в 18:17 2016-05-02 18:17 cavab TechNikh 02 May '16 18:17 2016-05-02 18:17 tərəfindən verilir

Bu kimi bir şey sınadıq:

 if [ $# -eq 0 ] || [ $# -gt 1 ] then echo "$#" fi 
6
06 нояб. John Boker tərəfindən verilən cavabı 06 Noyabr. 2010-11-06 04:58 '10 at 04:58 2010-11-06 04:58

Baş Bash Reference Guide → 3.4.2 Xüsusi Seçimlər

#
($ #) Decimal formatında mövqelər parametrlərinin sayına qədər uzanır.

Buna görə $# hər zaman 0 ya da böyük bir tamsayı olacaq.

Beləliklə, $# 1 və ya daha çox olduğunda bir şey etmək istəyirsinizsə, yalnız $# və ya 1 :

 [ $# -eq 1 ]  echo "1 positional param" || echo "0 or more than 1" 

Bu halda sintaksis:

 [ condition ]  {things if true} || {things if false} 
1
19 нояб. Cavab 19 noyabr fedorqui tərəfindən verilir 2015-11-19 01:21 '15 at 1:21 'də 2015-11-19 01:21

Etiketler haqqında digər suallar və ya bir sual