Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类似于makefile的Bash脚本_Bash - Fatal编程技术网

类似于makefile的Bash脚本

类似于makefile的Bash脚本,bash,Bash,我想制作一个像makefile一样工作的bash脚本。 它将有诸如-archive、-clean、-backup等选项。 唯一的要求是它必须具有-o参数,以便指定名称。 我现在的问题是,我不知道如何从参数中取出.c文件 例如,如果我输入 ./compile.sh-o name-backup hello_world.c print.c 我该如何编译这个 这是我到目前为止的代码 #!/usr/local/bin/bash if [ $1 != '-o' ]; then echo "ERROR -o

我想制作一个像makefile一样工作的bash脚本。 它将有诸如-archive、-clean、-backup等选项。 唯一的要求是它必须具有-o参数,以便指定名称。 我现在的问题是,我不知道如何从参数中取出.c文件

例如,如果我输入 ./compile.sh-o name-backup hello_world.c print.c

我该如何编译这个

这是我到目前为止的代码

#!/usr/local/bin/bash

if [ $1 != '-o' ]; then
echo "ERROR -o wasn't present as first argument"
echo "HELP"
echo "BASH syntax: $ compile –o filename –clean –backup –archive -help cfilenames"
echo "WHERE:"
echo "$             Unix Prompt"
echo "comiple       Name of bash program"
echo "-o filename   Mandatory Argument"
echo "-clean        Optional and when present deletes all .o files"
echo "-backup       Optional and copies all .c and .h files into backup directory"
echo "-archive      Optional and Tars content of source directory. Then moved to backup directory"
echo "-help     Provides list of commands"
echo "cfilenames    Name of files to be compiled together"
fi
NAME=$2
shift
shift

options=$@
arguments=($options)

index=0
for argument in $options
do
    index=`expr $index + 1`
    case $argument in
      -clean) echo "clean" ;;
      -backup) echo "backup"
        mv -f *.c ~/backup
        mv -f *.c ~/backup ;;
      -archive) echo "archive"
        tar -zcvf backup.tar.gz *
        mv -f backup.tar.gz ~/backup/backup.tar.gz
        ;;
      -help) echo "help"
                echo "HELP"
                echo "BASH syntax: $ compile –o filename –clean –backup –archive -help cfilenames"
                echo "WHERE:"
                echo "$             Unix Prompt"
                echo "comiple       Name of bash program"
                echo "-o filename   Mandatory Argument"
                echo "-clean        Optional and when present deletes all .o files"
                echo "-backup       Optional and copies all .c and .h files into backup directory"
                echo "-archive      Optional and Tars content of source directory. Then moved to backup directory"
                echo "-help         Provides list of commands"
                echo "cfilenames    Name of files to be compiled together"
        ;;
esac
done
exit;

感谢您似乎正在寻找的bash内置解析选项。您可以按如下方式使用它:

#!/bin/bash
while getopts "abc:" flag do
    echo "$flag" $OPTIND $OPTARG
done
阅读更多:


如果您想使用长选项,可以使用一个单独的程序,您可以从bash调用该程序。它是
linux util
的一部分,这是大多数发行版默认安装的一部分,或者至少是基本软件包的一部分。

您似乎在寻找一个用于解析选项的bash内置程序。您可以按如下方式使用它:

#!/bin/bash
while getopts "abc:" flag do
    echo "$flag" $OPTIND $OPTARG
done
阅读更多:


如果您想使用长选项,可以使用一个单独的程序,您可以从bash调用该程序。它是
linux util
的一部分,这是大多数发行版默认安装的一部分,或者至少是基本软件包的一部分。

我最初使用的是getopts,但我了解到不能使用长参数。因为它是一个单独的程序,这是否意味着它不是通用的?例如,我无法将其传输到另一台计算机。我最初使用的是getopts,但我了解到不能对其使用长参数。因为它是一个单独的程序,这是否意味着它不是通用的?例如,我无法将它转移到另一台机器。我想尝试新的东西。我想尝试新的东西。