Как я могу заставить сценарий взять несколько аргументов?

Cygwin, вместе с эмуляцией командной строки Unix, оболочка в этом отношении, не является 100%-м эквивалентом никакой оболочки UNIX. Следовательно, другая функциональность некоторых приложений от их дубликатов UNIX и некоторых полностью не рабочие команды UNIX, должен ожидаться. Это никогда не предназначалось, чтобы быть платформой обучения UNIX насколько я знаю.

Если Вы серьезно относитесь к изучению Unix, предполагая, что у Вас есть полудостойная и недавно созданная машина с вполне достаточной памятью, также предполагая, что Вы не хотите бросать свой комфорт окон путем начальной загрузки во вторичный раздел Linux, я предложил бы использовать виртуальное поле Oracle, чтобы создать виртуальный раздел под окнами и выполнить реальную операционную систему Unix на нем, не как эмулятор оболочки Unix. Вы найдете все свои команды там, и их ожидаемое поведение совпадет с Вами, выполняют его на реальной машине, кроме команд те тестовые аппаратные средства, конечно.

Если Вы смущены, просто гуглите термин "VirtualBox для новичков". Вы найдете несметное число чтения материала.

Удачи

14
27.04.2015, 20:44
5 ответов

Использование той же структуры, что и ваш исходный скрипт, вам просто нужно итерации Над массивом $ @ (это список аргументов, приведенных в командной строке):

#!/usr/local/bin/bash
set -e
if [ "$#" -lt 1 ]
then
echo  "Please insert at least one argument"
exit
else
echo -e "\c"
fi


for file in "$@"
do
    if [ -h  "$file" ]
    then
         echo "$file is a symbolic link"
    else    
         echo "$file is not a symbolic link"
    fi
done

Упрощенная версия то же самое:

#!/usr/bin/env bash
[ "$#" -lt 1 ] && printf "Please give at least one argument\n" && exit 
for file 
do
    [ -h "$file" ] && printf "%s is a symbolic link\n" "$file" || 
        printf "%s is not a symbolic link\n" "$file"
done
10
27.01.2020, 19:50

Никто не упомянул сдвиг?

if [ x = "x$1" ] ; then
    echo need at least one file
    exit 1
fi

while [ x != "x$1" ] ; do
  if [ -h  "$1" ]; then
    echo "$1 is a symbolic link"
  else    
    echo "$1 is not a symbolic link"
  fi
  shift
done
7
27.01.2020, 19:50

Вы можете использовать для цикла для обработки всех файлов, переданных в скрипт:

for f do
  if [ -h  "$f" ]; then
    printf "%s is a symbolic link\n" "$f"
  else    
    printf "%s is not a symbolic link\n" "$f"
  fi
done
5
27.01.2020, 19:50

Еще один сдвиг :

: "${1?USAGE: "$0" files...}"
while   [ "$#" -gt 0 ]
do      [ -h "$1" ]
        printf "'%s' is %.$((!$?*4))s%s\n" \
               "$1" "not " "a symbolic link." 
shift;  done
3
27.01.2020, 19:50

То, как я прочитал это, было как заставить мой личный скрипт принимать несколько аргументов, как, например, wget может выполнить «wget url1 url2 url3»

вставьте весь свой сценарий в следующее место, где написано «строки из моего сценария», и сохраните этот файл как новый сценарий.:

ARGUMENTS=$(echo "$@"| tr " " "\n") ; while read A; do "lines from my script";done < "$ARGUMENTS"

Аргументы скрипта хранятся в переменной $@. Этот небольшой сценарий охватывает ваш сценарий и запускает его несколько раз, каждый раз передавая ему следующий аргумент. Если ваш текущий скрипт ссылается на $1, вам придется изменить его на $A.

1
06.02.2021, 16:02

Теги

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