Como salvar valores de maiúsculas e minúsculas na variável

0
selection=

until [ "$selection" = "0" ]; do

  echo ""
  echo "PROGRAM MENU"
  echo "1 - display free disk space"
  echo "2 - display free memory"
  echo ""
  echo "0 - exit program"
  echo ""
  echo -n "Enter selection: "
  read selection
  echo ""
  case $selection in
      1 ) df ;;
      2 ) free ;;
      0 ) exit ;;
      * ) echo "Please enter 1, 2, or 0"
  esac
echo $selection

done

Se eu pressionar 2, ele mostrará espaço livre e o eco mostrará 2, mas preciso que o eco esteja "livre".

    
por shekar 06.05.2016 / 07:52

3 respostas

1

Você não pode. A seleção é usada pela declaração de caso para decidir o que fazer. Não é definido pela declaração do caso.

Você pode querer tentar algo assim:

selection=

until [ "$selection" = "0" ]; do

  cmd=''

  echo ""
  echo "PROGRAM MENU"
  echo "1 - display free disk space"
  echo "2 - display free memory"
  echo ""
  echo "0 - exit program"
  echo ""
  echo -n "Enter selection: "
  read selection
  echo ""

  case "$selection" in
      1) cmd='df' ;;
      2) cmd='free' ;;
      0) cmd='exit' ;;
      *) echo "Please enter 1, 2, or 0"
  esac

  if [ -n "$cmd" ] ; then 
    echo "selection $selection is '$cmd'"
    $cmd
  fi

done

Observe que ele executa o echo "selection $selection is '$cmd' antes de executar $cmd , caso contrário, ele sairá antes do echo quando $selection for 0.

    
por 06.05.2016 / 08:02
0

Aqui está como eu faria isso. Pode ser útil / instrutivo.

#!/bin/bash

menu() {
  cat >&2 <<EOF

PROGRAM MENU

1 - display free disk space
2 - display free memory

0 - exit program

EOF
}

while true; do
  menu
  read -p "Enter selection: " selection
  case "$selection" in
    1)
      echo df
      df
      ;;
    2)
      echo free
      free
      ;;
    0)
      echo exit
      exit
      ;;
    *)
      echo "Please enter 1, 2 or 0" >&2
      ;;
  esac
done
    
por 06.05.2016 / 08:05
0

if i press 2 its showing free space and echo is showing 2 but i need echo is "free"

Portanto, atualmente, echo $selection imprime 2 gratuitamente e você deseja imprimir free . Nesse caso, substitua:

  2 ) free ;;

Com:

  2 ) free; selection=free ;;

Com a variável selection definida para a string free , isso faz com que o comando echo imprima o que você deseja.

Alternativa

Como outra opção, mas não uma substituição exata, o comando bash select pode ser usado para realizar algo semelhante com um código muito mais curto:

PS3="Please enter 1, 2, or 3: "
select selection in "display free disk space" "display free memory" "exit program"
do
  case "$selection" in
      "display free disk space") df ;;
      "display free memory") free; selection=free ;;
      "exit program") exit ;;
  esac
  echo $selection
done
    
por 06.05.2016 / 08:02