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.