Пользовательские аргументы в скрипте bash - PullRequest
0 голосов
/ 10 октября 2018

Мне нужно написать скрипт, который будет выполнять различные задачи, в зависимости от того, какие аргументы передаются из командной строки.Имя сценария «safeDel.sh». Ниже приведено следующее:

#!/bin/bash

arg=$1
r_file=$2

if [$arg == '-l']
then
#List all files in trash can
echo '$arg'

elif [$arg == '-r']
then
#recover r_file
echo '$arg'

elif [$arg == '-d']
then
#Delete (interactively?) the contents of trash directory 
echo '$arg'

elif [$arg == '-t']
then
#Display total usage in bytes of trash directory
echo '$arg'

fi

. На этом этапе я просто пытаюсь использовать оператор if / else для вывода соответствующего аргумента.Однако, если я наберу './safeDel.sh -r', вы получите:

. / SafeDel.sh: строка 6 [команда -r не найдена]

. / SafeDel.sh: строка 11 [команда -r не найдена]

. / safeDel.sh: строка 16 [команда -r не найдена]

. / safeDel.sh: строка 21 [команда -rне найден]

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

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Возможно, вы захотите использовать вместо встроенной оболочки bash getopts.Я предполагаю, что r_file требуется только с параметром -r, то есть : после r.

#!/bin/bash

while getopts lr:dt arg
do
    case $arg in
        i) #List all files in trash can
           echo "$arg"      # Use double quotes, not single
           ;;
        r) #recover r_file
           r_file="$OPTARG"
           echo "$arg"   
           echo "$r_file"
           ;;
        d) #Delete (interactively?) the contents of trash directory
           echo "$arg"   
           ;;
        t) #Display total usage in bytes of trash directory
           echo "$arg"   
           ;;
    esac
done

В командной строке (где $ - этоподсказка):

$ ./gash.sh -r fred.txt
r
fred.txt

$ ./gash.sh -r
./gash.sh: option requires an argument -- r

$ ./gash.sh -x
./gash.sh: illegal option -- x

$ ./gash.sh -dr fred.txt
d
r
fred.txt
0 голосов
/ 10 октября 2018

Добавление пробелов вокруг текста в скобках [] решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...