相关疑难解决方法(0)

如何在Bash中解析命令行参数?

说,我有一个用这行调用的脚本:

./myscript -vfd ./foo/bar/someFile -o /fizz/someOtherFile
Run Code Online (Sandbox Code Playgroud)

或者这个:

./myscript -v -f -d -o /fizz/someOtherFile ./foo/bar/someFile 
Run Code Online (Sandbox Code Playgroud)

什么是分析这使得在每一种情况下(或两者的组合)的接受的方式$v,$f以及 $d将全部设置为true$outFile将等于/fizz/someOtherFile

bash scripting command-line arguments getopts

1764
推荐指数
24
解决办法
136万
查看次数

如何将传递给我的bash脚本的所有参数传递给我的函数?

假设我已经定义了一个function abc()将处理与分析传递给我的脚本的参数相关的逻辑.

如何将我的bash脚本收到的所有参数传递给它?params的数量是可变的,所以我不能像这样硬编码传递的参数:

abc $1 $2 $3 $4
Run Code Online (Sandbox Code Playgroud)

编辑.更好的是,我的函数有没有办法访问脚本参数的变量?

bash function parameter-passing

564
推荐指数
7
解决办法
28万
查看次数

bash脚本不为变量分配标志

我有一个bash文件,我传递的参数就像

bash foo.sh update -f /var/ -v true
Run Code Online (Sandbox Code Playgroud)

所以根据这个答案我的脚本应该是这样的

if [[ "$1" == "update" ]]; then
    updater 
fi

function updater(){
    verbose='false'
    fflag=''
    error=''

while getopts 'f:v' flag; do
  case "${flag}" in 
    f) fflag="${OPTARG}";;
    v) verbose='false';;
    *) error="bflag";;
  esac
done

  echo $fflag
}
Run Code Online (Sandbox Code Playgroud)

我使用第一个脚本作为入口点,因为我有其他功能做其他事情,但由于某种原因,上面的脚本甚至没有显示$fflag我尝试从函数中移出getopts循环的值无济于事

linux bash getopt

2
推荐指数
1
解决办法
597
查看次数

在 bash 的 case 语句中使用命令参数

我有一个 case 语句,它是我命令的一部分,我希望它遍历所有 args,直到它们都被消耗掉。

while [ ! -z ${@:2} ] ; do
    case "${@:2}" in
        -d|--delete*)
            YES_DELETE=1
            shift
            ;;        
        -nd|--nodelete*)
            NO_DELETE=1
            shift
            ;;
        -y|--yes*)
            SKIP_PROMPT=1
            shift
            ;;
        -*|*)
            echo "Bad command, try again."
            ;;
    esac
done
Run Code Online (Sandbox Code Playgroud)

我的命令$@$ mpip stt=12 -nd -y使${@:2}="-nd -y". 如果它也像我想要的那样工作,它会在迭代两次后退出 while 循环并且NO_DELETE=1 SKIP_PROMPT=1为真。当我运行它时,一切都还没有初始化,它变成了一个无限循环,我不知道我做错了什么。

linux bash case

1
推荐指数
1
解决办法
782
查看次数