shell脚本基础
来源:互联网 发布:linux编程获取串口参数 编辑:程序博客网 时间:2024/05/20 18:20
创建shell脚本
shell脚本的后缀名是.sh。下面是一个简单脚本的创建:
用vim打开脚本,可以看到里面就一句简单的echo指令:
shell脚本实际上就是各种linux指令和工具使用的集合。
通常,在脚本的最开始会指明使用哪个shell来执行该脚本,因此会有#!/bin/bash这样的语句。改写上例:
此外,脚本可以有返回值,使用exit x的命令,x就是返回值:
通常返回0表示脚本运行正常,否则表示异常。
调用完shell脚本后,可以通过$?来查看脚本是否运行正常:
shell脚本如果不指定exit,那么就默认返回最后一条指令的退出状态。
以上就是一个最基础的脚本。
注释
先提一下注释。
前面的例子中,有用到#,它其实是单行注释的符号,但是有一个例外,就是用在第一行的#!/bin/bash中。
对于多行的注释,使用<<!和!配对使用。
参数
shell脚本可以带参数,执行时的形式如下:
查看脚本:
使用$后接数字来表示参数,其中:
$0表示程序名称,$1表示第一个参数,$2表示第二个参数,以此类推。
但是有一点需要注意,当参数个数是两位数时,比如10,则需要将10用{}括起来表示参数,即${10}表示第十个参数,下面是一个例子:
如果写成了$10,得到的结果是错的:
还有几个以$开头的变量与参数有关:
$@:表示所有参数,每一个参数都是独立的字符串。
$*:也表示所有参数,但是所有参数都在一个字符串中。
$#:命令行参数的个数,不包括程序名。
下面是一个例子:
执行下面的命令,得到的结果:
变量
变量有两种,一个是环境变量,一个是用户自定义变量。
环境变量一般用大写,用户变量一般用小写。
变量用$来读取。
以下是一个环境变量:
以下是一个用户变量:
在shell脚本中有一个比较重要的作用,就是将linux命令的执行结果赋值给变量,可以使用反引号来完成:
变量赋值需要注意一点,在变量,等号和值之间不要有空格。
当将一个数学表达式赋值给变量时,可以使用$[ ],下面是一个例子:
脚本结构化
if-then语句
if commandthen commandselif commandthen commandselse commandsfi
这里的command的返回值如果是0,就会执行底下的语句。
command可以是单个的,也可以是多个command进行“与”或者“或”,比如下面的例子是判断脚本是否外带参数以及参数的值是否是“all”:
if [ -n $1 ] && [ "$1" = "all" ]thenxxxfiif后接的command,必须有返回值,但是如果没有的话,就不能直接使用。
不过有一个命令test,只要在test后列出的条件成立,test命令就会返回0。
不过对于test命令,有一种更简单的写法:
if [ condition ]
[ ]里面可以进行三种类型的条件判断:
1)数值的比较,下面是一个例子:
[]中使用了-eq,表示两个参数相等。
另外还有其它的比较选项:
2)字符串的比较,下面是一个例子:
[]中使用了=来比较,需要注意点,一般数值上才用=这样的符号,而这里字符串上使用了=。
另外还有其它的比较选项:
有一个问题需要注意,对于<和>,不能直接使用,因为它们在shell下有其它的语义,所以需要做转换:>要用\>,<要用\<。
3)文件(和目录)比较:
另外,对于字符串的比较,还可以使用[[ expression ]]进行模式匹配,下面是一个例子:
for语句
for var in listdo commandsdone下面是一个例子:
while语句和until语句
while/until test commandsdo commandsdonewhile语句和unitl语句的语义刚刚相反。
前者是test返回0时执行子语句,而后者是test返回非0时执行子语句。
下面是一个while的例子:
下面是一个until的例子:
上述两个示例的结果一致。
- Linux Shell脚本基础
- Linux Shell脚本基础
- Shell脚本编程基础
- Shell脚本编程基础
- shell脚本基础
- shell脚本基础
- shell脚本基础
- shell脚本基础
- Shell脚本编程基础
- shell 脚本基础学习
- shell脚本基础语法
- Linux shell脚本基础
- Shell脚本基础
- shell脚本基础
- Linux shell脚本基础
- Shell脚本基础总结
- shell脚本基础
- Shell脚本基础介绍
- C++字符及字符串处理函数
- JavaString的一些理解
- 关于ImageLoader继续研究
- 容器
- PPT1 例5
- shell脚本基础
- Unix程序跳转—setjmp与longjmp
- 安卓--一个简单的SD卡文件浏览程序
- 深入了解LOD
- Go包管理gpm简介
- Windows 系统实现VMware虚拟机下Ubuntu系统共享文件
- 基于STM32F429-Discovery USART1 PA9 PA10 调试成功。
- SPFA总结
- Android studio下的自定义属性的使用