Shell

Shell脚本语言:注释、变量及字符串(2)

2018-07-25  本文已影响5人  095b62ead3cd

一、注释
示例代码:

  #!/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

总结:

从左边删除到右边
         #->表示查询方向从左到右
        ##->表示查询方向从右到左
从右边删除到左边
        %->表示查询方向从右到左
        %%->表示查询方向从左到右
上一篇 下一篇

猜你喜欢

热点阅读