вывести параметры из цикла for в bash

Итак, я хочу напечатать параметры сценария, которые удовлетворяют некоторым условиям:

t1=0

for i in $@; do


if [ $i == "-1" ] || [ $i == "-2" ] || [ $i == "-3" ]; then

t2=$(($t1+2))

echo $i $"$t2"

fi

t1=$(($t1+1))

done

Если я вызываю сценарий следующим образом:

./name_of_script  -2 aaa -m bbb -3 ccc -4 ccc -1 ddd

, я хочу, чтобы он напечатал что-то например:

-2 aaa
-3 ccc
-1 ddd

Итак, я хочу напечатать параметр -1, -2 или -3 и каждый из параметров, следующих сразу после них. но я получаю это вместо этого:

-2 2
-3 6
-1 10

Я просто не могу превратить 2, 6 и 10 в 2, 6 и 10 долларов, чтобы можно было распечатать эти параметры сценария.

Есть идеи? Большое спасибо.

0
задан 16 June 2020 в 00:55

1 ответ

Хотя то, что вы пытаетесь сделать , может быть возможным, канонический способ получить следующий позиционный параметр в Сценарий оболочки использует встроенную функцию shift . Так, например, вы могли бы сделать

#!/bin/bash

while [ $# -gt 0 ]; do
  opt="$1"
  case $opt in
    -1|-2|-3)
      shift
      printf '%s %s\n' "$opt" "$1"
    ;;
    *)
      printf 'unknown option: %s\n' "$opt" >2 
    ;;
  esac
  shift
done

. Однако то, что вы, похоже, делаете здесь, это переизобретение встроенного в getopts :

#!/bin/bash

while getopts ":1:2:3:4:m:" opt; do
  case $opt in
    1|2|3)
      printf -- '-%s %s\n' "$opt" "$OPTARG"
    ;;
    *)
      printf -- 'unknown option: -%s\n' "$opt" >2 
    ;;
  esac
done

затем

$ ./name_of_script -2 aaa -m bbb -3 ccc -4 ccc -1 ddd
-2 aaa
-3 ccc
-1 ddd
1
ответ дан 19 June 2020 в 21:24

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

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