Как назначить значение входной переменной в оболочке

Я прошу пользователя ввести и ввести данные в переменные, такие как $ 1, $ 2 и т. Д. Я проверяю переменную на нулевое значение и хочу заменить значение, если null.

if [ "$2" == "" ]; then 2=value fi 

Но что-то мне не хватает. Какие-либо предложения?

2 Solutions collect form web for “Как назначить значение входной переменной в оболочке”

Вы не можете напрямую устанавливать значения в позиционные параметры, подобные этому.

Вы можете установить их с помощью команды set , но это установит все значения ( $1 , $2 , …)

например

 $ set -- first second third fourth fifth $ echo $1 first $ echo $2 second 

Теперь есть два случая, когда $2 может быть пустой строкой; сначала, если значение не было передано, или второе, если "" передано как фактический аргумент, и поэтому все равно могут быть $3 , $4 и т. д.

Мы можем обрабатывать каждый случай несколько сложным образом:

 #!/bin/bash echo Before 1=$1 2=$2 3=$3 4=$4 if [ -z "$2" ] then first=$1 shift 2 set -- "$first" value "$@" fi echo After 1=$1 2=$2 3=$3 4=$4 

Бит внутри теста if обеспечит сохранение всех остальных значений.

например

 % ./testing arg1 "" "arg 3" "and arg 4" Before 1=arg1 2= 3=arg 3 4=and arg 4 After 1=arg1 2=value 3=arg 3 4=and arg 4 

Но вы можете сделать что-то проще и просто использовать ${2:-value} который будет оценивать value если $2 не установлен, поэтому вам не нужно беспокоиться о переписывании аргументов.

пытаться

 if [ -z "$2" ]; then set "$1" value fi 
  • см. тест человека (альтернатива – [ "x$2" == x ]
  • set будет позиционировать параметр, чтобы позиционировать как второй параметр, $ 1 следует напомнить как первый.
Interesting Posts

Локальный пользователь для сопоставления пользователей NFS

Полноэкранный терминал со сценарием в качестве экранной заставки под archLinux

Сервер и клиент NFS Debian Jessie

Вложение cmap в moinmoin

Используйте Unified Remote на Fedora через Bluetooth

Когда я перенаправляю вывод ls в файл, имя файла включается в этот файл. Как я могу избежать этого?

Исходный сценарий оболочки автоматически в терминале

Пакет Virtualbox и GPU: устройство с адресом PCI хоста, уже подключенным к этой виртуальной машине

Shomehow rx / tx-счетчики на интерфейсе сбрасываются

в чем разница между X11 и Xlib?

SSSD для аутентификации и SAMBA для совместного использования файлов

Как заставить ssh-соединение выйти в конце скрипта

Можно ли предупредить / предупредить, что текущий путь больше не является действительной символической ссылкой?

Если я устанавливаю java bin PATH Dockerfile Jar Command, но tomcat не делает

Не удалось установить том XFS после перезагрузки – неизвестная файловая система типа «xfs»

Linux и Unix - лучшая ОС в мире.