Нет необходимости в цикле, если вы знаете, что всегда будете получать четыре целых числа в командной строке:
#!/bin/sh
sum=$(( $1 + $2 + $3 + $4 ))
printf 'sum is %d\n' "$sum"
В качестве альтернативы просто
#!/bin/sh
printf 'sum is %d\n' "$(( $1 + $2 + $3 + $4 ))"
Для поддержки произвольного количества аргументов вам потребуется цикл:
#!/bin/sh
while [ "$#" -gt 0 ]; do
sum=$(( sum + $1 ))
shift
done
printf 'sum is %d\n' "$sum"
Этот сценарий будет перебирать свои аргументы командной строки, добавляя первый из них к переменной sum
и удаляя его из списка аргументов командной строки, пока не останется аргументов. Расширение переменной $#
расширится до количества аргументов командной строки, а shift
удалит $1
из списка, переместив $2
на место (и $3
на $2
и т. д. ).
В качестве альтернативы:
#!/bin/sh
for num do
sum=$(( sum + num ))
done
printf 'sum is %d\n' "$sum"
Вместо того, чтобы постоянно сдвигать список аргументов командной строки, он оставляет список нетронутым и перебирает его, добавляя каждый из них в sum
по очереди.
Заголовок цикла for num do
также может быть записан как for num in "$@"; do
.
Передать аргументы функции в программу, которую вы вызываете из функции:
composer () {
if [ "$PWD" = "/home/vhosts/domainName/httpdocs" ]; then
/usr/bin/php7.3 lib/composer "$@"
elif [ "$PWD" = "/home/vhosts/domainName2/httpdocs" ]; then
/usr/bin/php5.6 composer.phar "$@"
else
command composer "$@"
fi
}
"$@"
будет расширяться до аргументов функции, заключенных в отдельные кавычки (двойные кавычки необходимы ).
Также обратите внимание, что при вызове только composer
вам придется использовать command composer
, поскольку в противном случае вы вызывали бы функцию рекурсивно.
Я также исправил некоторые мелкие синтаксические ошибки, чтобы сделать функцию переносимой.
С помощью этой функции выполнение
composer install
в /home/vhosts/domainName/httpdocs
приведет к
/usr/bin/php7.3 lib/composer install
Другой вариант функции:
composer () {
case $PWD in
"/home/vhosts/domainName/httpdocs")
/usr/bin/php7.3 lib/composer "$@"
;;
"/home/vhosts/domainName2/httpdocs")
/usr/bin/php5.6 composer.phar "$@"
;;
*)
command composer "$@"
esac
}