当前位置: 首页 > news >正文

shell脚本学习-2

文章目录

  • 一、shell参数传递
  • 二、shell中的特殊变量
  • 三、shell中的函数
  • 四、shell函数中的参数

一、shell参数传递

运行 Shell 脚本文件时我们可以给它传递一些参数,这些参数在脚本文件内部可以使用$n的形式来接收,例如,$1 表示第一个参数,$2 表示第二个参数,依次类推。

#!/bin/bashecho "参数1 = $1"
echo "参数2 = $2"
xhh@cluo:~/study/shell$ ./shell-5.sh abcd 12346
参数1 = abcd
参数2 = 12346

二、shell中的特殊变量

变量含义
$0当前脚本的文件名
$n(n≥1)传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1,第二个参数是 $2。
$#传递给脚本或函数的参数个数。
$*传递给脚本或函数的所有参数。
$@传递给脚本或函数的所有参数。当被双引号" "包含时,$@ 与 $* 稍有不同,我们将在《Shell ∗ 和 *和 @的区别》一节中详细讲解。
$?上个命令的退出状态,或函数的返回值,我们将在《Shell $?》一节中详细讲解。
$$当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID
    #!/bin/bashecho "Process ID: $$"echo "File Name: $0"echo "First Parameter : $1"echo "Second Parameter : $2"echo "All parameters 1: $@"echo "All parameters 2: $*"echo "Total: $#"
xhh@cluo:~/study/shell$ ./shell-6.sh  adcd 12346
Process ID: 52421
File Name: ./shell-6.sh
First Parameter : adcd
Second Parameter : 12346
All parameters 1: adcd 12346
All parameters 2: adcd 12346
Total: 2

三、shell中的函数

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。

#!/bin/bashadd(){echo "输入第一个数字: "read aecho "输入第二个数字: "read becho "两个数字分别为 $a 和 $b !"return $(($a+$b))
}
add
echo "输入的两个数字之和为 $? !"

在这里插入图片描述

这里需要注意的是
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
$? 仅对其上一条指令负责,一旦函数返回后其返回值没有立即保存入参数,那么其返回值将不再能通过 $? 获得。

比如

#!/bin/bashfunction demoFun1(){echo "这是我的第一个 shell 函数!"return `expr 1 + 1`
}demoFun1
echo $?
echo $?

执行结果

这是我的第一个 shell 函数!
2
0

可以看到第二个 $? 并没有正确的返回出函数的执行结果,而是返回的一个0.证明函数没有错误。

四、shell函数中的参数

#!/bin/bashadd(){echo "第一个参数为 $1 !"echo "第二个参数为 $2 !"echo "第十个参数为 $10 !"echo "第十个参数为 ${10} !"echo "第十一个参数为 ${11} !"echo "参数总数有 $# 个!"echo "作为一个字符串输出所有参数 $* !"
}
add 1 2 3 4 5 6 7 8 9 34 73

打印结果
在这里插入图片描述
注意, 10 不能获取第十个参数,获取第十个参数需要 10 不能获取第十个参数,获取第十个参数需要 10不能获取第十个参数,获取第十个参数需要{10}。当n>=10时,需要使用${n}来获取参数。

如果使用 $10来表示 会识别为 $1 + 字符 0 所以这里显示为 10
比如我这里修改下顺序

#!/bin/bashadd(){echo "第一个参数为 $1 !"echo "第二个参数为 $2 !"echo "第十个参数为 $21 !"echo "第十个参数为 ${10} !"echo "第十一个参数为 ${11} !"echo "参数总数有 $# 个!"echo "作为一个字符串输出所有参数 $* !"
}
add 1 3 2 5 4 6 7 8 9 34 73

在这里插入图片描述

http://www.lryc.cn/news/213269.html

相关文章:

  • web3:智能合约浏览器版本的 IDE - remix 使用教程
  • 信号类型(通信)——QPSK、OQPSK、IJF_OQPSK调制信号
  • 常用压缩文件操作函数总结
  • leetcode_274 H指数
  • 微服务框架Consul--新手入门
  • docker运行syslog-ng,搭建日志服务器
  • Redis代替session实现用户验证
  • Ubuntu 内核降级到指定版本
  • uniapp开发app,在ios真机上出现的css样式问题
  • uniapp 页面间传参方法
  • 【年终特惠】基于最新导则下生态环评报告编制技术暨报告篇、制图篇、指数篇、综合应用篇系统性实践技能提升
  • 驱动开发7 基于GPIO子系统编写LED驱动,编写应用程序进行测试设置定时器,5秒钟打印一次hello world
  • 亚马逊云科技为奇点云打造全面、安全、可扩展的数据分析解决方案
  • 应用案例|基于三维机器视觉的曲轴自动化上下料应用方案
  • 关于ios和Android手机的下载pdf文件功能探讨
  • 医疗安全不良事件管理系统源码(PHP+ vue+laravel)
  • 基于ISO13209(OTX)实现引导诊断
  • 不一样的网络协议-------KCP协议
  • 前端-关于分辨率和屏幕大小关系的浅谈
  • where怎么等于多个值,sql where多个值
  • 02.Oracle的启动过程
  • git跳过用户名密码验证,以及配置credential-helper
  • web前端常见开发工具汇总 你用过几个?
  • 518抽奖软件,可从Excel~Word~Pdf~网页导入名单
  • 初学编程入门基础教学视频,中文编程开发语言工具箱之豪华编辑构件,免费版中文编程软件下载
  • Objective-C基本数据类型使用
  • 【前端早早聊直播回顾】Harmony Next 与 Flutter 的不解之缘
  • Vue之CSS基础
  • 【c++|opencv】二、灰度变换和空间滤波---3.均值滤波
  • 【Arduino环境下驱动合宙esp32c3单片机基本外设】