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

相关文章
|
14天前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
224 9
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
115 0
Linux系统初始化脚本
|
14天前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
91 2
|
1月前
|
算法 Linux Shell
Linux实用技能:打包压缩、热键、Shell与权限管理
本文详解Linux打包压缩技巧、常用命令与原理,涵盖.zip与.tgz格式操作、跨系统传文件方法、Shell运行机制及权限管理,助你高效使用Linux系统。
Linux实用技能:打包压缩、热键、Shell与权限管理
|
1月前
|
数据采集 监控 Shell
无需Python:Shell脚本如何成为你的自动化爬虫引擎?
Shell脚本利用curl/wget发起请求,结合文本处理工具构建轻量级爬虫,支持并行加速、定时任务、增量抓取及分布式部署。通过随机UA、异常重试等优化提升稳定性,适用于日志监控、价格追踪等场景。相比Python,具备启动快、资源占用低的优势,适合嵌入式或老旧服务器环境,复杂任务可结合Python实现混合编程。
|
消息中间件 存储 缓存
【嵌入式软件工程师面经】Linux系统编程(线程进程)
【嵌入式软件工程师面经】Linux系统编程(线程进程)
274 1
|
Linux 调度 数据库
Linux下的系统编程——线程同步(十三)
Linux下的系统编程——线程同步(十三)
219 0
Linux下的系统编程——线程同步(十三)
|
存储 Linux 调度
Linux系统编程 多线程基础
Linux系统编程 多线程基础
110 1
|
8月前
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
通过本文,您可以了解如何在业务线程中注册和处理Linux信号。正确处理信号可以提高程序的健壮性和稳定性。希望这些内容能帮助您更好地理解和应用Linux信号处理机制。
137 26
|
8月前
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
本文详细介绍了如何在Linux中通过在业务线程中注册和处理信号。我们讨论了信号的基本概念,并通过完整的代码示例展示了在业务线程中注册和处理信号的方法。通过正确地使用信号处理机制,可以提高程序的健壮性和响应能力。希望本文能帮助您更好地理解和应用Linux信号处理,提高开发效率和代码质量。
140 17