2012-03-25 2 views
0

私はmakefileのように動作するbashスクリプトを作りたいと思っています。 -archive、-clean、-backupなどのオプションがあります。 唯一の要件は、名前を指定するために-o引数が必要であることです。 私が今いる問題は、引数から.cファイルを引き出す方法がわかりません。例えばmakefileのように動作するBashスクリプト

、私は名前-backup hello_world.cのprint.c -o ./compile.sh をinputed場合

私はこれをどのようにコンパイルしますか?

これまでのコードは次のとおりです。あなたは、組み込みの解析オプションのためのbash、getopts(1P)を探しているように見える

#!/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 

[email protected] 
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; 

おかげ

+2

なぜmakeだけではないのですか? –

+0

新しいことを試したかったのです。 –

答えて

3

。次のようにあなたはそれを使用する:

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

もっと読むhttp://aplawrence.com/Unix/getopts.html#ixzz1qAQ29TFW

をあなたは長いオプションを使用したい場合は、getopt(1)、あなたはbashのから呼び出すことができます別のプログラムを使用することができます。これはlinux-utilの一部であり、ほとんどのディストリビューションのデフォルトインストールの一部、または基本パッケージの少なくとも一部です。

+0

私はもともとgetoptsを使用していましたが、長い引数を使用することはできません。 –

+0

それに応じて編集された答え –

+0

それは別のプログラムなので、普遍的ではないということですか?私はそれを別のマシンに転送することはできません。 –

関連する問題