0

こんにちは、スクリプトの初心者です。コマンドライン変数をスクリプトに渡すことができないという問題があります。

biz$: ./myproject.sh -x file2

私の(与えられた)myprojectには次の内容があります:

 Type ="" //here i pass first argument
 while [ $# -gt 0]
 case "$1" in 
       -x)        shift; type = "x" >&2;shift ;;
       -y)        shift; type = "y" >&2;shift ;;
 ###################################################
 BEGIN{                            
       if ($7 == '/'){
           if ($2 != "zzzz"){
               printf ("error",$0);

           if ($3 < 111){
               printf ("error", $0);
         }

 file = " " //here i want to pass my argument file2.          

これを解決するために私を助けてください。私はこれを解決しないと先に進むことができません。私はスクリプトの初心者です。私は $2 $3 $7 を差し出すことができません..専門家 pls 私はあなたの提案が必要です.

4

2 に答える 2

4

あなたは BASH を使用しており、コマンド ライン パラメーターをスクリプト内の 2 つの変数に取得したいと考えています。その場合、専門的なアプローチは「getopts」を使用することです

詳細については、このリンクを参照してください: bash コマンド ライン引数

于 2013-03-15T06:57:31.977 に答える
0
#!/bin/sh
# First line above, if this is a bourne shell script
# If this is a bash script use #!/bin/bash

# Assume this script is called from the command line with the following:
# ./myproject.sh -x file2 -y one two 110 four five six /

#Type =""               \\ here i pass first argument
                        # Comments are preceeded with # followed by a space
                        # No spaces around = for assignment of values
                        # Empty string "" not necessary

Type=                   # Here i pass first argument
 #while [ $# -gt 0]     # Spaces required just inside []
 while [ $# -gt 0 ]
 do
   case "$1" in
   #      -x)        shift; type = "x" >&2;shift ;;
   # >&2 Redirects standard out to standard error (stdout, stderr)
   #   and usually is not needed unless explicitly generating error
   #   messages
   # Type is not the same as type; however, you are trying to 
   #   load the file variable

   -x)  shift; file=$1; shift                            ;;
   -y)  shift; Type=y              # Get rid of -y only
                                                         ;;
  one)  if [ "$7" = '/' ]    # Space around = for tests
        then
          echo error $0 >&2
        fi
        if [ "$2" != zzzz ]
        then
          echo $2 is not equal to zzzz
        fi
        if [ "$3" -lt 111 ]          # -lt is less than
        then
          echo "$3 is less than 111"
        fi
        break                 # break out of while loop 
                                                         ;;
   esac
   echo Cmd Ln Args left: "$@"
 done
 echo file: $file, Type: $Type, \$3: $3, \$7: $7
####################################################
# The code below is awk code. Its functionality was
#   placed under case one above
# BEGIN{                            
#       if ($7 == '/'){
#           if ($2 != "zzzz"){
#               printf ("error",$0);
#
#           if ($3 < 111){
#               printf ("error", $0);
#         }
#
# file = " " //here i want to pass my argument file2.

OUTPUT:
Cmd Ln Args left: -y one two 110 four five six /
Cmd Ln Args left: one two 110 four five six /
error ./myproject.sh
two is not equal to zzzz
110 is less than 111
file: file2, Type: y, $3: 110, $7: /
于 2013-06-04T16:02:40.257 に答える