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..专家请我需要你的建议。

4

2 回答 2

4

我相信您正在使用 BASH,并且您希望将命令行参数获取到脚本中的两个变量中。在这种情况下,专业的方法是使用“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 回答