كتابة نص Shell Fish بحجة اختيارية
سؤال
لديّ نص Shell Fish الذي يتمثل سلوكه الافتراضي في إرسال بريد إلكتروني عند اكتماله. أود تعديله للرد على nomail
حجة من سطر الأوامر. لذلك ، على سبيل المثال ، فإن تشغيل البرنامج النصي عادة ما ينتج بريدًا إلكترونيًا:
michaelmichael: ~/bin/myscript
ولكن إذا ركض مع nomail
التبديل ، لن يرسل البريد الإلكتروني للتأكيد:
michaelmichael: ~/bin/myscript nomail
إذا قمت بتشغيل البرنامج النصي مع nomail
حجة ، إنها تعمل بشكل جيد. بدون nomail
, $argv
غير محدد ويرمي خطأ. لقد بحثت عن وثائق Fish Shell ، لكن لا يمكن أن تجد أي شيء ينجح. هذا ما لدي حتى الآن
switch $argv
case nomail
## Perform normal script functions
case ???
## Perform normal script functions
mailx -s "Script Done!"
end
تشغيل هذا يرمي الخطأ التالي:
switch: Expected exactly one argument, got 0
من الواضح أنه يتوقع حجة ، أنا لا أعرف بناء الجملة لإخباره بعدم قبول أي وسيطات ، أو واحدة إذا كانت موجودة.
أظن أن هذا أمر أساسي ، لكنني لا أفهم البرمجة النصية بشكل جيد للغاية.
المحلول
لف الخاص بك switch
بيان مثل هذا:
if set -q argv
...
end
أيضًا ، أعتقد أن حالتك الافتراضية يجب أن تكون case '*'
.
نصائح أخرى
إذا كنت تفضل استخدام عبارة التبديل ، فمن الممكن أيضًا:
switch (echo $argv)
case nomail
## Perform normal script functions
case '*'
## Perform normal script functions
mailx -s "Script Done!"
end