Как написать скрипт, который работает с аргументами или без них?

Эти ссылки могут оказаться полезными:

https://securityinabox.org/en https://wiki.ubuntu.com/BasicSecurity http://www.ubuntugeek.com/list-of -security-tools-available-in-ubuntu.htm

Некоторое программное обеспечение может быть полезно:

https://securityinabox.org/en Kismet - - Беспроводной инструмент мониторинга 802.11b. https://wiki.ubuntu.com/BasicSecurity Rkhunter - руткит, бэкдор, сниффер и сканер эксплойтов. http://www.ubuntugeek.com/list-of-security-tools-available-in-ubuntu.htm Snort - гибкая система обнаружения вторжений в сеть.
1
задан 30 May 2016 в 06:31

3 ответа

Вам нужно указать свои переменные в условии if. Замените:

if [ $1 = "--test" ] || [ $1 = "-t" ]; then

с:

if [ "$1" = '--test' ] || [ "$1" = '-t' ]; then  

Тогда он будет работать:

➜ ~ ./test.sh Не тестируется.

Всегда всегда дважды указывайте свои переменные!

7
ответ дан 23 May 2018 в 10:38
  • 1
    Являются ли одинарные кавычки существенными или могут использовать двойные кавычки? – Paranoid Panda 29 May 2016 в 22:50
  • 2
    Точный ответ зависит от того, какую оболочку вы используете, но из вашего вопроса я предполагаю, что вы используете потомок Bourne-shell. Основное различие между одиночными и двойными кавычками состоит в том, что расширение переменной происходит внутри двойных кавычек, но не внутри одиночных кавычек: $ FOO = bar $ echo " $ FOO " bar $ echo '$ FOO' $ FOO (хмм .... не может форматировать код в комментариях ...) – JayEye 29 May 2016 в 22:52
  • 3
    @ParanoidPanda Вам не нужно использовать одинарные кавычки, нет, но это хорошая практика, чтобы использовать их в строковых литералах. Таким образом, вы не будете удивлены позже, если ваши строковые данные имеют символ bash, который хочет расширить. – Seth♦ 29 May 2016 в 22:58
  • 4
    @ParanoidPanda Что @JayEye сказал: с одинарными кавычками нет расширения переменной foo=bar echo '$foo' печатает $foo на выходе, но foo=bar echo "$foo" печатает bar. – Έρικ Κωνσταντόπουλος 30 May 2016 в 14:13

Вы используете bash. У Bash есть отличная альтернатива [: [[. С помощью [[ вам не нужно беспокоиться о том, ссылается ли на цитаты, и вы получаете гораздо больше операторов, чем [, включая правильную поддержку для ||:

if [[ $1 = "--test" || $1 = "-t" ]]
then
    echo "Testing..."
    testing="y"
else
    testing="n"
    echo "Not testing."
fi

Или вы можете использовать регулярные выражения:

if [[ $1 =~ ^(--test|-t) ]]
then
    echo "Testing..."
    testing="y"
else
    testing="n"
    echo "Not testing."
fi

Конечно, правильное цитирование всегда должно выполняться, но нет смысла придерживаться [ при использовании bash.

4
ответ дан 23 May 2018 в 10:38

Проверить, присутствуют ли аргументы (в общем, и делать действия соответственно). Это должно работать:

#!/bin/bash

check=$1

if [ -z "$check" ]; then
  echo "no arguments"
else echo "there was an argument"
fi
3
ответ дан 23 May 2018 в 10:38
  • 1
    Почему бы не [ -z "$1" ]? – Έρικ Κωνσταντόπουλος 30 May 2016 в 14:14
  • 2
    @ ΈρικΚωνσταντόπουλος В этом случае, конечно, обычно в сценариях я вызываю переменную за один раз, ссылаюсь на нее в процедурах, которые обычно более одного раза. Решил сохранить протокол в выборке. – Jacob Vlijm 30 May 2016 в 14:17
  • 3
    В этом примере вы, кажется, используете $check один раз, перед любым shift s, поэтому лучше использовать $1. – Έρικ Κωνσταντόπουλος 30 May 2016 в 14:20
  • 4
    @ ΈρικΚωνσταντόπουλος Конечно, нет, как уже упоминалось, это образец , который будет использоваться в скриптах. В сценариях неверно повторять одно и то же снова и снова. – Jacob Vlijm 30 May 2016 в 14:22
  • 5
    Я понимаю, что вы имеете в виду, но лучше не использовать shebangs #! при предоставлении образцов (вы должны описать оболочку вне кода). – Έρικ Κωνσταντόπουλος 30 May 2016 в 14:25

Другие вопросы по тегам:

Похожие вопросы: