12.Linux shell编程(脚本传参)

(创建于2018/1/31)

1.传递参数

Press ENTER or type command to continue
#!/bin/bash                                                                              
 
echo $0
echo $1
echo $2

执行命令:
./14.sh hello world bye

输出结果:
./14.sh
hello
world

我们在传递了三个参数,hello world bye,但是脚本中只接到了两个,因为默认第一个参数$0得到
的是当前文件路径,是一个完整路径,如果我们只要得到文件名不要路径怎么做呢

使用basename命令(basename的作用是从文件名中去除目录和后缀,ru执行basename kernel/include/linux/stddef.h得到stddef.h)

  1 #!/bin/bash                                                                              
  2 
  4 filename=$(basename $0) //注意不要有空格
  5 
  6 echo filename
  7 echo $1
  8 echo $2
  
  输出
  
tabstop=8root@iZbp11v3y27wpf6mglp2glZ:/user/renzhenming/shell# ./14.sh hello world bye
filename
hello
world

2.使用$@遍历所有参数

#!/bin/bash                                                                              

echo "the number of params:$#"    //$#获取参数个数

for param in "$@"
do
   echo "param:$param"
done

./14.sh hello=bitch world byebye
输出:

the number of params:3
param:hello=bitch
param:world
param:byebye

getopt命令
。。。

shell中的变量

看下边是一个简单的脚本,定义了三个变量,然后输出,看下下边的结果。我们期望打印的结果是一个数字,两个字符串。但是只是打印了前两个,然后报了一个错误,line 5: zhen: command not found,根据提示可以看到zhen 这个命令没有找到,为什么它把zhen这个字符串当作了命令呢,原因就在于HEHE这个变量后边的值由于没有加双引号,所以只把ren当作了HEHE的值,然后空格后边的zhen被当作了命令对待,牢记一点,shell编程中,空格后边的都会被当作命令对待,慎用空格

  1 #!/bin/bash                                                                        
  2 
  3 NDK=10
  4 JNI="ren zhen ming"
  5 HEHE=ren zhen ming
  6 
  7 echo $NDK
  8 echo $JNI
  9 echo $HEHE

执行结果
root@iZuf67sz57humoriy3o6oiZ:/usr/ndk/temp# ./ren.sh 
./ren.sh: line 5: zhen: command not found
10
ren zhen ming

字符串中也可以引用变量值

在下边我把JNI这个变量放在了字符串中进行打印

  1 #!/bin/bash                                                                        
  2 
  3 NDK=10
  4 JNI="ren zhen ming"
  5 HEHE="ren zhen ming"
  6 
  7 echo $NDK
  8 echo $JNI
  9 echo $HEHE
 10 
 11 echo "$JNI is a good man"

tabstop=8root@iZuf67sz57humoriy3o6oiZ:/usr/ndk/temp# ./ren.sh 
10
ren zhen ming
ren zhen ming
ren zhen ming is a good man
root@iZuf67sz57humoriy3o6oiZ:/usr/ndk/temp# ^C
root@iZuf67sz57humoriy3o6oiZ:/usr/ndk/temp# 
将命令执行结果赋值给变量

例如我们想得到当前的时间和当前用户并将它打印出来,这样做怎么样。可以看到命令date和who只是被当作字符串打印了

  1 #!/bin/bash                                                                        
  2 
  3 text=date
  4 
  5 text2=who
  6 
  7 echo $text
  8 echo $text2


tabstop=8root@iZuf67sz57humoriy3o6oiZ:/usr/ndk/temp# ./ren.sh 
date
who
root@iZuf67sz57humoriy3o6oiZ:/usr/ndk/temp# 

那么是不是应该在date命令前加上$,因为我们取变量值就是用的它,试一下,发现什么都没有打印

  1 #!/bin/bash                                                                        
  2 
  3 text=$date
  4 
  5 text2=$who
  6 
  7 echo $text
  8 echo $text2

实际上应该这样做

  1 #!/bin/bash                                                                        
  2 
  3 text=$(date)
  4 
  5 text2=$(who)
  6 
  7 echo $text
  8 echo $text2

  tabstop=8root@iZuf67sz57humoriy3o6oiZ:/usr/ndk/temp# ./ren.sh 
Sat Sep 8 11:10:08 CST 2018
root pts/0 2018-09-08 10:13 (101.88.229.243) root pts/1 2018-09-08 10:34 (101.88.229.243) root pts/2 2018-09-08 11:08 (101.88.229.243)

或者这样做,他们的结果是一样的,注意这个符号不是单引号,而是你键盘右上角esc下边的那个符号

  1 #!/bin/bash                                                                        
  2 
  3 text=`date`
  4 
  5 text2=`who`
  6 
  7 echo $text
  8 echo $text2

上一篇:监控网卡实时流量


下一篇:php的 zend opcache VS apc 性能比较