一、注释
示例代码:
#!/bin/bash
#输出"Hello world!"
echo "Hello world!"
在Shell脚本中,没有多行注释,只有单行注释。
二、变量
1、变量定义:
定义变量的时候变量名处不需要加$
变量名和等号之间不能有空格
变量名的首字母必须是字母或下划线
变量名中间不允许有空格
不允许使用标点符号
2、只读变量:
关键字:readonly
示例代码:
name="abc"
readonly name
name="123"
echo"ready go"
结果:
iMac03deiMac:Desktop imac03$ ./hello.sh
./hello.sh: line 5: name: readonly variable
ready go
3、删除变量:
语法:unset 变量名
示例代码:
name="abc"
echo $name
unset name
echo $name
echo "ready go"
结果:
abc
ready go
4、变量类型:
本地变量:作用域整个bash进程 name="name"
局部变量:作用域当前代码段 local name="name"
环境变量:作用域当前shell进程及子进程 export name="name"
位置变量:示例代码:
#${0}表示脚本文件名称,参数从1开始
name=${1}
age=${2}
sex=${3}
echo "姓名:${name} 年龄:${age} 性别:${sex}"
执行脚本:
./hello.sh xiaoming 12 男
执行结果:
姓名:xiaoming 年龄:12 性别:
特殊变量:
示例代码:
name=${1}
age=${2}
sex=${3}
echo ${?} #返回上一个命令执行状态的值 0执行成功 1程序执行结果 2:程序状态返回码(0-255)
echo $# #参数个数
echo $* #参数列表,将所有参数组成一个字符串
echo $@ #参数列表,分开的字符串
echo $$ #获取当前shell进行ID
echo $! #执行上一个指令pid
echo "姓名:${name} 年龄:${age} 性别:${sex}"
执行脚本结果:
./hello.sh xiaoming 12 男
执行结果:
0
3
xiaoming 12 男
xiaoming 12 男
3071
姓名:xiaoming 年龄:12 性别:男
三、字符串
1、定义:单引号,双引号都可以
name='123'
echo ${name}
name="123"
echo ${name}
结果:
123
123
2、字符串拼接:
示例代码1:
name='xiaoming'
age=18
sex='男'
info="${name}${age}${sex}"
echo ${info}
结果:xiaoming18
示例代码2:
name='xiaoming'
age=18
sex='男'
info=" 姓名:"${name}" 年龄:"${age}" 性别:"${sex}" "
echo ${info}
结果:姓名:xiaoming 年龄:18 性别:男
3、获取字符串长度:{#变量名} 4、字符串截取:{变量名:开始位置:截取长度}
5、字符串删除:
语法1:${变量名#删除字符串 正则表达式}
作用:从字符串开头(左边)开始匹配要删除字符串
info="姓名:name 年龄:age 性别:sex"
result=${info#姓名}
echo ${result}
结果::name 年龄:age 性别:sex
语法2:${变量名##删除字符串 正则表达式}
作用:从字符串结尾(右边)开始匹配要删除字符串
info="姓名:name 年龄:age 性别:sex"
result=${info##*e}
echo ${result}
结果:x
总结:语法1和语法2都是从左边删除到右边,查找方向不一样
语法3:${变量名%删除字符串 正则表达式}
作用:从字符串结尾(右边)开始匹配,删除匹配的字符串
info="姓名:name sdsfdasdfees 年龄:age 性别:sex"
result=${info%f*}
echo ${result}
结果:姓名:name sdsfdasd
语法4:${变量名%%删除字符串 正则表达式}
作用:从字符串开头(左边)开始匹配要删除字符串
info="姓名:name sdsfdasdfees 年龄:age 性别:sex"
result=${info%%f*}
echo ${result}
结果:姓名:name sds
总结:
从左边删除到右边
#->表示查询方向从左到右
##->表示查询方向从右到左
从右边删除到左边
%->表示查询方向从右到左
%%->表示查询方向从左到右
网友评论