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

相关文章
|
23天前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
66 1
|
9天前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
32 2
6种方法打造出色的Shell脚本
|
14天前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
39 6
|
11天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
6月前
|
Ubuntu Linux Shell
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
107 0
|
6月前
|
Shell Linux C++
Linux C/C++ 开发(学习笔记二):Shell脚本编程案例
Linux C/C++ 开发(学习笔记二):Shell脚本编程案例
106 0
|
6月前
|
运维 Shell Linux
Linux 之大数据定制篇-Shell 编程
Linux 之大数据定制篇-Shell 编程
174 0
|
网络协议 Shell Linux
【Linux】shell编程基础(超详细,入门看这一篇就够了)(下)
【Linux】shell编程基础(超详细,入门看这一篇就够了)(下)
106 0
|
Shell Linux
Linux操作系统实验七 Shell编程之循环程序编程(下)
Linux操作系统实验七 Shell编程之循环程序编程(下)
169 0
|
2月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单