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

简介: (创建于2018/1/31)1.传递参数Press ENTER or type command to continue#!/bin/bash ...

(创建于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

相关文章
|
15天前
|
安全 Linux Shell
Linux上执行内存中的脚本和程序
【9月更文挑战第3天】在 Linux 系统中,可以通过多种方式执行内存中的脚本和程序:一是使用 `eval` 命令直接执行内存中的脚本内容;二是利用管道将脚本内容传递给 `bash` 解释器执行;三是将编译好的程序复制到 `/dev/shm` 并执行。这些方法虽便捷,但也需谨慎操作以避免安全风险。
|
5天前
|
Linux Shell
Linux系统编程:掌握popen函数的使用
记得在使用完 `popen`打开的流后,总是使用 `pclose`来正确关闭它,并回收资源。这种做法符合良好的编程习惯,有助于保持程序的健壮性和稳定性。
17 6
|
15天前
|
Shell
Shell脚本有哪些基本语法?
【9月更文挑战第4天】
36 17
|
6天前
|
Linux Shell
Linux系统编程:掌握popen函数的使用
记得在使用完 `popen`打开的流后,总是使用 `pclose`来正确关闭它,并回收资源。这种做法符合良好的编程习惯,有助于保持程序的健壮性和稳定性。
26 3
|
15天前
|
存储 Unix Shell
shell脚本编程基础
【9月更文挑战第4天】
28 12
|
14天前
|
网络协议 关系型数据库 MySQL
Shell 脚本案例
Shell 脚本案例
28 8
|
15天前
|
Shell Linux
Shell 编程 编写hello word
Shell 编写hello word
36 5
|
15天前
|
Shell Linux 开发工具
linux shell 脚本调试技巧
【9月更文挑战第3天】在Linux中调试shell脚本可采用多种技巧:使用`-x`选项显示每行命令及变量扩展情况;通过`read`或`trap`设置断点;利用`echo`检查变量值,`set`显示所有变量;检查退出状态码 `$?` 进行错误处理;使用`bashdb`等调试工具实现更复杂调试功能。
|
4月前
|
Ubuntu Linux Shell
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
102 0
|
4月前
|
Shell Linux C++
Linux C/C++ 开发(学习笔记二):Shell脚本编程案例
Linux C/C++ 开发(学习笔记二):Shell脚本编程案例
89 0