所有我是脚本新手,我在这里有问题,我无法将命令行变量传递给我的脚本。
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美元。专家们,我需要你的建议。
答案 0 :(得分:4)
我相信您正在使用BASH,并且您希望将命令行参数获取到脚本中的两个变量中。在这种情况下,专业方法是使用'getopts'
有关详细信息,请参阅此链接:bash command line arguments。
答案 1 :(得分: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: /