1.第一个shell脚本
1.1创建一个shell脚本
touch xxx.sh
标配格式
#!/bin/bash ->这一行是标准头部,不可以去掉
echo "hello world!"
1.2.mac终端查看文件
ls -l hello.sh
e.g:-rw-r--r--@ 1 avalanching staff 32 8 30 16:58 hello.sh
.mac终端修改文件权限
修改为可执行的
chmod +x ./hello.sh
1.4.mac终端执行Shell脚本文件
./hello.sh
2.shell脚本基本语法
2.1 # ->注释, 在shell脚本中只有单行注释
# 这是一行注释
2.2 定义变量
- 注意a:请不要添加$作为前缀,$$为取值符号
- 注意b:变量名和等号之间不能加入空格
- 注意c:变量名前缀必须是字母或下划线
- 注意d:变量名中间不能穿插标点符号和空格
name="smile 2017"
2.3 定义只读变量 关键之readonly
name="我是只读的"
readonly name
2.4 删除变量 (shell脚本因为错误而停止执行)
#!/bin/bash
name="Andy"
#输出变量
echo $name
#删除变量
unset name
#删除变量
echo $name
echo "执行了"
2.5基本的变量类型
a.类型一:本地变量 作用域为整个bash进程
语法:name=”Dream”
b.类型二:局部代码 作用域为本地的代码段(修饰符local)
语法:local name=”Andy”
c.类型三:环境变量 作用域当前的shell进程以及shell的子进程(修饰符export)
语法:export name=”Andy”
d.类型四:位置变量 获取传入的参数
#!/bin/bash
filename=${0}
name=${1}
age=${2}
sex=${3}
echo "脚本名称:${filename} 姓名:${name} 年龄:${age} 性别:${sex}"
调用的指令:
/hello.sh Andy 190 男
e.类型五:特殊变量
- ${0} -> 获取文件的名称
- ${?} -> 返回上一个命令执行的状态的返回值
value:
- 0:执行成功 1:执行返回的结果
- 2:表示状态码(0-255)
- $# ->参数个数
- $* ->参数列表 所有的参数组成一个字符串
- $@ ->参数列表 参数单一存在
- ${$} ->当前shell的进程ID
- ${!} ->上一个shell的进程ID
3.Shell的字符串
3.1 字符串中的单引号
#!/bin/bash
name='Andy'
echo $name
3.2 字符串的双引号
#!/bin/bash
name="Andy"
echo $name
3.3字符串的拼接
a)
#!/bin/bash
name='Andy'
age=100
sex="男"
info="${name}@{age}@{sex}"
echo $info
b)
#!/bin/bash
name='Andy'
age=100
sex="男"
info="姓名:"${name}" 年龄:"@{age}" 性别:"@{sex}""
echo ${info}
3.4获取字符串的长度:
语法:${#变量名称}
#!/bin/bash
string="Andy"
echo ${#string}
3.5字符串截取
1.语法:${变量名:开始位置:截取长度}
2.语法:
#!/bin/bash
string="I have a dream"
echo ${string:3:5}
lenght = ${#string} - 1
echo ${string:2:lenght}
echo ${string:2}
3.6 删除字符串
语法一:${变量名#要删除的字符串 正则表达式}
作用:从字符串的开头开始匹配,删除
#!/bin/bash
string="I have a dream dd"
result=${string#I}
echo $result
result=${string#*d}
echo $result
result=${string#h*d}
echo $result
语法二:${变量名##要删除的字符串正则表达式}
作用:从字符串的尾部开始匹配 往前面删除
#!/bin/bash
string="I have a dream dd"
result=${string##I}
echo $result
result=${string##*d}
echo $result
语法三:${变量名%要删除的字符串正则表达式}
作用:从字符串的尾部开始匹配,删除
#!/bin/bash
string="I have a dream dda"
result=${string%d}
echo $result
result=${string%d*}
echo $result
语法三:${变量名%%要删除的字符串正则表达式} 查询方向逆转
#!/bin/bash
string="I have a dream dda"
result=${string%%d}
echo $result
result=${string%%d*}
echo $result
3.7总结
#表示从左边往右边删除,查询方向为从左边到右边
##表示从左边往右边删除,查询方向为从右边到左边
%表示从右边往左边删除,查询方向为从左边到右边
%%表示从右边往左边删除,查询方向为从右边到左边