Bash를 배우고 있는데 작은 스크립트를 작성하려고 하다가 작은 문제에 부딪혔습니다.
#!/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
내가 겪고 있는 문제는 디렉토리를 확인하고 싶다는 것입니다. 그렇지 않으면 복사 명령을 실행하려고 할 때 "디렉토리가 존재하지 않습니다"라는 두 번째 에코가 발생합니다. "cp: can stat '/et/passwd': 해당 파일 또는 디렉터리가 없습니다."라는 메시지가 표시되지만 첫 번째 에코에는 "암호 파일이 홈 디렉터리에 복사되었습니다."라는 메시지가 표시되지만 두 번째 에코에는 "파일이 존재하지 않습니다."가 표시됩니다. 표시되지 않습니다. 누구든지 해결책이 있다면 정말 감사하겠습니다. 감사해요!
편집: 여기 내 전체 스크립트가 있습니다
#!/bin/bash
clear
lred='\033[1;31m'
red='\033[0;31m'
NC='\033[0m' # No Color
blue='\033[0;34m'
lblue='\033[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
답변1
(채팅에서) 업데이트하세요. 여기서 달성하려는 작업에 사례 설명이 더 적합하다고 생각합니다.
#!/bin/bash
clear
lred='\033[1;31m'
red='\033[0;31m'
NC='\033[0m' # No Color
blue='\033[0;34m'
lblue='\033[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
passwd
파일을 이 /home
디렉터리 에 복사 하시겠습니까 ? 그렇지 않으면 다음과 같이 작동합니다.
#!/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
이 -d
매개변수는 다음을 확인합니다.FILE exists and is a directory
. -e
어떤 수표를 원하시나요 FILE exists
?
추가적으로, 당신은 당신이 하려는 일에 맞지 않기 때문에 더 많은 충돌을 일으키는 |
뒤에 파이프를 시도하고 있습니다.then