대화형 프롬프트에서 쉘 스크립트를 실행하는 데 몇 가지 문제가 있습니다. 전체 코드가 잘 작동합니다. bash 스크립트를 echo 'hello world' 줄로 바꾸면 문제 없이 잘 작동합니다. 저는 오랫동안 쉘 사용자 경험이 없기 때문에 설명과 함께 답변해 주시면 감사하겠습니다.
따라서 기본적으로 제가 원하는 것은 데이터 백업을 시작하기 위해 다른 스크립트를 실행할 것인지 묻는 대화형 쉘 스크립트를 사용하는 것입니다.
bash 명령을 사용하여 기본 스크립트(bash my_script.sh)를 실행하려고 하는데 다음 오류가 발생합니다.
main_backup_pend.sh: line 17: bash: command not found
17번째 줄은 아래에 보이는 bash 스크립트를 호출하는 곳입니다.
[Yy]* ) echo 'Copying database...'; bash $PATH/backup.database.sh > backup.log.$DATE.database; break;;
#!/bin/bash
PATH=/data/sjamal/4.Backups
DATE=170317
#[COPY]Mysqldump, making database copy storing it locally
while true; do
read -p "Do you wish make a database copy?" yn
case $yn in
[Yy]* ) echo 'Copying database...'; bash $PATH/backup.database.sh > backup.log.$DATE.database; break;;
[Nn]* ) break;;
* ) echo "Please answer yes or no.";;
esac
done
#[BACKUP]Performing back up of Repository to HPC
while true; do
read -p "Do you wish to back up Repository to HPC?" yn
case $yn in
[Yy]* ) echo 'backing up Repository...'; bash $PATH/backup.Repository.sh > backup.log.$DATE.repository; break;;
[Nn]* ) break;;
* ) echo "Please answer yes or no.";;
esac
done
답변1
스크립트의 첫 번째 줄은 모든 것을 깨뜨립니다.
PATH=/data/sjamal/4.Backups
이는 스크립트의 모든 명령( bash
인터프리터 자체 포함)이 이 디렉토리에만 있음을 알려줍니다. (이것이 PATH
예약된 변수라는 것을 몰랐을 수도 있습니다 . echo $PATH
가끔 일반적인 검색 명령에 대한 디렉터리 목록을 살펴보세요.)
PATH
스크립트 전체에서 사용을 다른 것으로 변경하면 backup_dir
예상대로 작동할 가능성이 더 높아질 수 있습니다.
"$double_quotes"
추가 팁: 변수를 사용할 때 변수 (및 사용되는 경로)를 넣으세요 . 따라서 .backup.log.$DATE.repository
"backup.log.$DATE.repository"