上篇文章初步认识了一下shell脚本及其简单的案例,下面我们再来讲一下shell的进击部分。
一.变量
1.常用系统变量:($HOME、$SHELL、$PWD、$USER)
2.自定义变量:
2.1.基本语法
*定义变量:变量=值
*撤销变量:unset 变量
*声明静态变量:readonly 变量
2.2.变量定义规则:
*变量名称可以由字母、数字、下划线组成,但是不能以数字开头,环境变量名建议大写;
*等号两侧不能有空格;
*在bash中,变量默认类型为字符串类型,无法直接进行数值运算;
*变量的值如果有空格,需要用双引号或单引号括起来。
2.3.案例:
*定义变量 A,并输出
*撤销变量,输出空
*声明静态变量,不能unset,再次赋值报错
*在bash中,变量默认类型为字符串类型,无法直接进行数值运算
*变量的值如果有空格,需要使用双引号或单引号括起来
*把变量提升为全局变量export,(在.sh文件中添加以下图一内容)
3.特殊变量:($n、$#、$* 、$@、$?)
3.1.$n
3.1.1.基本语法:
n为数字,$0代表该脚本名称,$1-$9代表第一到九个参数,十以上的需要用花括号包起来,例:${10}
3.1.2.案例(输出该脚本文件名称、输入参数1和输入参数2 的值):
*创建.sh文件并写入内容赋予权限[chmod +x ./test.sh](touch test.sh)
*输出内容
3.2.$#
3.2.1.基本语法:
获取所有输入参数个数,常用于循环
3.2.2.案例(获取输入参数个数)
3.3.$*、$@
3.3.1.基本语法
$*:代表命令行中所有参数,把所有参数看做一个整体;
$@:代表命令行中所有参数,把每个参数区分对待。
3.3.2.案例(打印输出所有参数):
3.4.$?
3.4.1.基本语法
最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0,则证明上一个命令执行不正确
3.4.2.案例(判断某脚本是否正确执行)
二.函数
1.系统函数(basename、dirname):
1.1.basename(删掉所有的后缀包括最后一个“/”字符,然后将字符串显现出来)
*案例(截取路径的文件名称)
1.2.dirname(从给定的包含绝对路径文件名中去除文件名,返回剩下的路径)
*案例(截取文件的绝对路径)
2.自定义函数:
2.1.注意
*必须在调用函数地方之前,声明好函数,shell脚本是逐行运行,不会像其他语言一样先编译;
*函数返回值,只能通过 $? 系统变量获得,可以显示加return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)
2.2.案例(计算两个输入参数和)
三.运算符
1.基本语法:
*"$((运算式))"或"$[运算式]"
*expr + , - , * , / , % 加,减,乘,除 (expr运算符之间要有空格)
2.案例(计算3+2的值):
四.条件判断
1.基本语法:
[ condition ]:(前后要有空格,条件非空即为true,反之false)
2.常用判断条件:
2.1.两整数之间比较
= :字符串比较 -lt:小于 -le:小于等于 -eq:等于 -gt:大于 -ge:大于等于 -ne:不等于
2.2.按照文件权限进行判断
-r:有读的权限 -w:有写的权限 -x:有执行分权限
2.3.按照文件类型进行判断
-f:文件存在并且是一个常规分文件 -e:文件存在 -d:文件存在并是一个目录
3.案例:
*23是否大于22 0:true 其他:false
*多条件判断(&&表示前一条命令执行成功时,才执行后一条命令;||表示上一条命令执行失败时,才执行下一条命令)
五.流程控制
1.if 判断
1.1.基本语法(中括号与条件之间必须有空格,if后要有空格)
1.2.案例(判断用户输入的信息,如果是1则输出OK,2输出NOTOK,其他的不输出):
2.case 语句
2.1基本语法(双分号表示命令序列结束,相当于java中的break;最后的 * 表示默认模式,相当于java中的 default)
2.2.案例
3.for 循环
3.1.基本语法
3.2.案例(从1加到100):
4.while 循环
4.1基本语法
4.2.案例(从1加到100):