【问题标题】:Simple argument parse in bash [duplicate]bash中的简单参数解析[重复]
【发布时间】:2018-11-16 11:17:06
【问题描述】:

我是 bash 新手。我会向可以帮助我解决这个问题的人寻求帮助。 我创建了一个进行备份的脚本。下一步是让这个脚本在未来某个特定的时间戳运行。我知道我可以用 crontab 做到这一点。 我的问题是脚本需要用户的一些输出才能正常运行。 (如您所见,它要求路径) 我需要做的是让脚本接受一个参数(路径),所以它可以像这样运行:backup.sh -path=/tmp/myfoldertobackup 从我刚刚读到的内容来看,似乎我必须使用 getopts 但这仍然让我很困惑。 看起来我还需要在没有输入参数时设置大小写。请帮忙!

任何建议将不胜感激!谢谢!!!

#!/bin/bash
#Simple backup script for onee.newdomain.tk
echo - e "Please tell me the path of directory you'd like to backup?"
read directory
cd $directory
mkdir backup
#mkdir "backup_$(date +'%Y_%m_%d__%H_%M_%S')"
SOURCEDIR=$directory
tar -czvf public.tgz public_html
mysqldump -u onee -pjFztm3s72anA oneex > onee.mysqlbackup.sql
mv public.tgz $directory/backup/
mv onee.mysqlbackup.sql $directory/backup/
mv backup backup.`date +"%d-%m-%Y"`
echo "==============================="
echo "Done!"
echo "==============================="

【问题讨论】:

    标签: bash parsing arguments getopts


    【解决方案1】:

    这是一个示例脚本,可以为您执行此操作:

    #!/bin/bash
    
    while [ $# -gt 0 ]; do
      case "$1" in
        -path=*)
          directory="${1#*=}"
          ;;
        *)
          echo "Invalid args: $@"
          exit 1
      esac
      shift
    done
    
    # You can do whatever with $directory here
    

    【讨论】:

    • 非常感谢!
    • 使用 bash 算术表达式而不是普通的旧测试 ([)。例如:x=2; ((x > 3)) ||回声“不”。
    猜你喜欢
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 2013-05-11
    • 2017-06-02
    • 2015-05-07
    相关资源
    最近更新 更多