bash if, then e else instrução

0

Estou aprendendo bash, me deparei com um pequeno problema ao tentar escrever um pequeno script

#!/bin/bash
clear
read num
if [ "$num" -eq 2 ] 

then [ -d "/etc/passwd" ] | sudo cp /etc/passwd /home
        echo -e "${lred}The passwd file has been copied to your home directory. ${NC}"
else 
        echo "The directory does not exist"
fi

o problema que tenho é que eu quero que o diretório seja verificado, caso contrário, exiba o segundo eco "O diretório não existe" ao tentar executar o comando copy. Eu recebo "cp: não pode stat '/ et / passwd': Nenhum arquivo ou diretório", mas o primeiro eco que afirma "O arquivo passwd foi copiado para o seu diretório home." ainda aparece eo segundo eco "O arquivo não existe" não. Se alguém tem uma solução, eu realmente agradeço. Obrigado!

Editar: aqui está meu script inteiro

#!/bin/bash

clear
lred='3[1;31m'
red='3[0;31m'
NC='3[0m' # No Color
blue='3[0;34m'
lblue='3[1;34m'

echo -e "${red}Welcome to Lab 7 Utilities Menu ${NC}" # tells echo to enable backslash escapes
sleep 3
clear
echo -e "${lblue}Choose one of the options from the following list:${NC}"
echo -e "${blue}1. Monitor existing processes ${NC}"

echo -e "${blue}2. Copy passwd to /home directory ${NC}"

echo -e "${blue}3. Ping local host ${NC}"

echo -e "${lred}4. Exit ${NC}"

read num 

if [ $num -eq 1 ]

then ps aux
        echo -e "${lred}The list has been successfully generated! ${NC}"
fi

if [ "$num" -eq 2 ]; then
        if [ -e "/etc/passwd" ]; then
           sudo cp /etc/passwd /home
           echo -e "${lred}The passwd file has been copied to your home directory. ${NC}"
        else
           echo "The File does not exist"
        fi
    else
        echo "You entered number that isn't 2"
fi

if [ "$num" -eq 3 ]

then ping -c 4 127.0.0.1
        echo -e "${lred}You have completed pinging localhost. ${NC}"

elif [ "$num" -eq 4 ]

then clear

elif [ "$num" -gt 4 ]
then echo -e "${red}Please choose between number 1 and 4. ${NC}"
clear

fi
    
por Hp88 23.02.2015 / 04:20

1 resposta

1

Atualizar (do nosso bate-papo), acho que uma declaração de caso funciona melhor para o que você está tentando realizar aqui:

#!/bin/bash

clear
lred='3[1;31m'
red='3[0;31m'
NC='3[0m' # No Color
blue='3[0;34m'
lblue='3[1;34m'

# tells echo to enable backslash escapes
echo -e "${red}Welcome to Lab 7 Utilities Menu ${NC}"
sleep 3
clear
echo -e "${lblue}Choose one of the options from the following list:${NC}"
echo -e "${blue}1. Monitor existing processes ${NC}"
echo -e "${blue}2. Copy passwd to /home directory ${NC}"
echo -e "${blue}3. Ping local host ${NC}"
echo -e "${lred}4. Exit ${NC}"

read num

case $num in
        1)
           ps aux
           echo -e "${lred}The list has been successfully generated! ${NC}"
        ;;
        2)
           if [ -e "/etc/passwd" ]; then
              sudo cp /etc/passwd /home
              echo -e "${lred}The passwd file has been copied to your home directory. ${NC}"
           else
              echo "The File does not exist"
           fi
        ;;
        3)
           ping -c 4 127.0.0.1
           echo -e "${lred}You have completed pinging localhost. ${NC}"
        ;;
        4)
           clear
        ;;
        *)
           echo -e "${red}Please choose between number 1 and 4. ${NC}"
        ;;
esac


Tem certeza de que deseja copiar seu arquivo passwd para o diretório /home ? Fora isso, isso deve funcionar:

#!/bin/bash
clear
read num
if [ "$num" -eq 2 ]; then
        if [ -e "/etc/passwd" ]; then
           sudo cp /etc/passwd /home
           echo -e "${lred}The passwd file has been copied to your home directory. ${NC}"
        else
           echo "The File does not exist"
        fi
else
        echo "You entered a number that isn't '2'"
fi

O argumento -d verifica se FILE exists and is a directory . O que você quer é -e , que verifica FILE exists .

Você também estava tentando canalizar | após o then , o que causaria mais conflitos, pois é incorreto para o que você está tentando fazer.

    
por 23.02.2015 / 04:28