1.Shell介绍
shell是一种脚本语言,使用shell脚本可以访问操作系统的内核服务。
可以用于编译库。
shell有多种,其中bash是所有操作系统都默认的脚本语言。
2.创建一个shell脚本
1.创建:使用终端命令:
touch hello.sh
2.打开hello.sh 在hello.sh中写一个hello,world
#!/bin/bash
# 输出了Hello world!
echo "Hello world!"
- 使用 #! 表示约定标记,他会告诉系统这个脚本需要什么样子的解释器来执行
- shell中注释用 #
- echo:表示命令用于输出文本信息
- 执行shell脚本
使用终端命令:
./hello.sh
3.文件权限
1.文件权限结构:
- 第一部分:文件类型->QQ群类型 (以qq为例)
- 第二部分:文件所有者->群主
- 第三部分:所有者同组用户->管理员
- 第四部分:其他用户->群成员
2.使用终端命令查看文件权限:
ls -l hello.sh 得到结果:-rw-r—r-- 没有操作权限
3.使用终端命令修改文件权限:
chmod +x ./hello.sh 结果:-rwxr-xr-x 可以使文件有操作权限
4.Shell变量
1.注意事项:
注意一:定义变量时候,变量名出不需要加"$"符号
注意二:变量名和等号不能够有空格(和我们的一般语言不一样)
注意三:变量名首字母必需是字母+下划线(a-z、A-Z)
注意四:变量名中间不允许有空格
注意五:不允许使用标点符号
2.只读变量
关键字:readonly
name="HelloApp"
readonly name
echo "执行了"
修改只读变量会报 ./hello.sh: line 6: name: readonly variable
3.删除变量
语法:unset(干掉了)
案例:unset 变量名
5.变量类型
本地变量:作用域整个bash进程可以使用
语法:name="Dream"环境变量:当前shell进程以及子进程
语法:export name="Dream"局部变量:当前代码段(修饰符:local)
语法:local name="Andy"位置变量
执行一段脚本代码:
#!/bin/bash
shellName=${0}
name=${1}
age=${2}
sex=${3}
echo "姓名:${name} 年龄:${age} 性别:${sex} "
执行终端命令:
./hello.sh Jeff 150 男
得到执行结果: 姓名:jeff 年龄:120 性别:男
5.特殊变量 ,可以加大括号(易于辨别),也可以不加。
${0} ->特殊变量->文件名称
${?} ->表示返回上一个命令执行状态返回值(0-255),0表示执行成功,系统预留错误(1、2、127)
$# ->参数个数
$*和$@ ->参数列表,$*将参数用一个字符串表示。$@将参数分开表示。
$$ ->当前shell进行ID
$! ->执行的上一个指令PID
6.字符串操作
1.字符串表示:使用单引号或者双引号
name="andy"
name='rose'
2.字符串拼接
#!/bin/bash
name="Andy"
age=100
sex="男"
方式一:不带双引号
info="${name} ${age} ${sex}"
方式二:带双引号
info=" 姓名:"${name}" 年龄:"${age}" 性别:"${sex}" "
3.获取字符串长度
语法结构:${#变量名}
4.字符串截取
语法:${变量名:开始位置:截取长度}
#!/bin/bash
name="I have a Dream"
可以这样:
result=${name:2:4} // 结果为:have
也可以:
result=${name:5} // 结果为:e a Dream
5.字符串删除
语法:${变量名 %/%%/#/## 删除字符串 正则表达式}
从左往右删除用#
#表示查询方向从做往右
##表示查询方向从右到左
从右往左删除用%
%表示查询方向从右到左
%%表示查询方向从左到右
6.echo命令
1、显示字符串
echo "iPhoneX 标配 8388"
2、显示转义字符
echo " " iPhoneX 顶配 9688 " "
3、显示变量
iphone="iPhoneX"
echo "${iphone} 9688"
4、显示换行
正确写法(-e:表示开启转义功能)
echo -e "iPhoneX \n hello未来"
5、不换行
注意:"-e"开启转义功能,"\c"表示不换行
echo -e "iPhoneX hello未来 \c "
echo "科技"
6、显示一个执行命令
要求:输出当前时间等等
echo date
7.数组
1、语法
数组名=(值1 值2 值3…)
2.初始化
方式一:
name=("jack" "rose" "liming")
方式二:
name=()
name[0]="jack"
name[1]="rose"
3.读取数组
语法结构:${数组名[下标]}
name=("404" "Andy" "柚芒子" "全班最菜")
#输出一个元素
echo ${name[0]}
#输出所有->"@"表示输出所有的数据,或者"*" 也表示所有。
echo ${name[@]}
echo ${name[*]}
4.数组个数
$[#name[@]]
$[#name[*]]
可以通过$[name[2]] 获取第几个元素的字符长度