Bash или условие через оператор while

Самое простое решение - процитировать команду, переданную в sem:

sem -j+0 "find \"$i\" -type f -print0"

Вы можете увидеть разницу в этом примере

$ sem -j 8 echo "a  a" 
a a
$ sem -j 8 'echo "a  a"' 
a  a
3
04.06.2018, 18:25
2 ответа

Una variante sh, y eliminaría los problemas asociados con ${var,,}que usa la configuración regional para convertir cadenas (minúsculas Ino es ipara todos, por ejemplo):

#! /bin/sh -
while true; do
  printf %s "Please enter your choice (stringA or stringB): "
  IFS= read -r result || exit # exit on EOF
  case $result in
    ([sS][tT][rR][iI][nN][gG][aAbB]) break
  esac
  echo >&2 Invalid choice.
done
1
27.01.2020, 21:11

El problema en su código es que su ciclo se repite mientras $resultno es lo mismo que tantostringAcomostringB(al mismo tiempo ). Es posible que desee utilizar

while [[ "${result,,}" != 'stringa' ]] && [[ "${result,,}" != 'stringb') ]]

o

until [[ "${result,,}" == 'stringa' ]] || [[ "${result,,}" == 'stringb') ]]

Para que un usuario elija una de varias opciones, no haga que escriba largas cadenas. En su lugar, proporcióneles un menú simple para elegir.

Sugerencia:

#!/bin/bash

PS3='Your choice: '
select result in 'stringA' 'stringB'; do
    case $REPLY in
        [12])
            break
            ;;
        *)
            echo 'Invalid choice' >&2
    esac
done

printf 'You picked %s!\n' "$result"

Ejecutando esto:

$ bash script.sh
1) stringA
2) stringB
Your choice: 3
Invalid choice
Your choice: 2
You picked stringB!
2
27.01.2020, 21:11

Теги

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