shell的本质:命令行解释器
shell脚本的本质:多条shell命令的有序集合。
编程语言的类型:
1、编译型:C
2、解释型:脚本(针对于写完之后的文件进行添加可执行权限--》chmod)
第一步:新建并打开一个后缀为.sh的文件
顶格书写一句话:#! /bin/bash(交代了解释器所在的位置)
按照用户自己的需求组合命令(按照语法)
第二步:升级可执行权限
第三步:执行运行即可
shell基本语法
脚本里面没有类型,称之为“弱类型”
但是会存在变量
用户自定义变量
格式:变量名
赋值:变量名=值 (等号前后不能出现空格)
使用变量的值:${变量名} / $变量名
1.位置变量:通过命令行传参进行传入的值。
类似于数组,引用位置变量的值时,需要使用$和数字组合而成:$0 第一个位置参数。
2.系统预定义变量:事先系统一定具备特定含义的变量
特点:都是由$和另外一个字母组合而成。
$#:命令行传入参数的个数
$@:命令行传入的参数
$*:命令行传入的参数
$?:获取上一条命令的退出状态:上一条正常退出:0 ,上一条异常结束:1
3.环境变量env :可以通过你该命令显示当前系统中所有的环境变量以及各自的值。
添加新环境变量:export 新变量名=值1:值2:值3(赋值一个值也可以)
修改环境变量的结果:export 变量名=新值:${变量名} / export 变量名=${变量名}:新值
清除环境变量:unset 环境变量名
shell语句
注释:只要以#开头的语句都是说明性语句(除过顶格书写的那一行之外)
Read 从键盘动态输入值
read 变量名1 变量名2 ... 变量名N (多个变量名之间以空格隔开)
-----》从键盘给N个变量进行赋值
提示语句:
形式1:echo 标准输出
形式2:通过read -p “提示语句”
通配符的转义
双引号:软转义,会将双引号内部的内容进行输出,但是内容如果包含变量名或者命令时,则先访问变量的值或者先执行完命令之后,再去进行输出。
单引号:硬转义,会将单引号内容进行输出,但是遇到里面含有变量名或者命令也不会去执行,直接被当成字符串进行输出。
不加引号:多数情况下和加双引号没有区别,但是当字符串中含有空格或者其他特殊字符时,就会出现不可预知的问题,因此建议用双引号替代之。
反斜杠:会去除掉shell特殊字符的含义。和硬转义比较类似。
expr算术运算
用途:+ - * / %
格式:
`expr 对象1 运算符 对象2`
注意:
1、` `叫反引号,在使用expr命令时,必须使用。否则没有效果。
2、expr必须和对象1之间保留空格,运算符和两个运算对象之间也需保留空格。
test测试命令
方法1:test 对象1 对象2
方法2:[ 对象1 对象2 ] (注意[]和对象以及对象1与对象2之间的空格)
测试整形:
n1大于n2 :n1 -gt n2
n1小于n2:n1 -lt n2
n1等于n2:n1 -eq n2
n1不等于n2: n1 -ne n2
n1大于等于n2:n1 -ge n2
n1小于等于n2: n1 -le n2
测试字符串
相等:s1 = s2
不等于:s1 != s2
-z s1:测试s1的长度是否为0
-n s2:测试s2的长度是否不为0
测试文件属性
在Linux下一切皆文件:(7种)
假设存在文件f1 f2
-f f2:测试f2是否为普通文件
-d f1:测试f1是否为目录文件
-L f2:测试f2是否为软链接文件
-r :测试文件是否存在且可读
-w:测试文件是否存在且可写
-x:测试文件是否存在且具有可执行
-s : 测试文件的长度是否不为0
f1 -nt f2 :测试f1是否比f2更新
f1 -ot f2:测试f1是否比f2更旧
注意:文件新旧是依赖于文件的创建时间。
选择结构
1.多路分支if:
if 表达式1
then
语句块1
elif 表达式2
then
语句块2
...
else
语句块N
fi
2.Switch语句:
case 常量值 in
模式1)
语句块1
;;
模式2)
语句块2
;;
......
*)
语句块N
;;
Esac
循环结构
1.for格式
带列表:
for 变量名 in 单词列表
do
命令表;
Done
不带列表(命令行传参)
for 变量名
do
命令表
done
(3)C语言风格
for ((变量名;判断表达式;变量自增))
{
命令表
}
2.while格式
while 表达式
do
命令表
Done
shell函数
函数的定义格式:
函数名()
{
命令表
}
形式1:采用命令置换的方式进行调用函数
变量=`函数名 参数1 参数2 ....`
注意:要是以命令置换的方式进行调用,在进入子函数内部之后,遇到标准输出语句不会立即输出,而是将所有的标准输出语句的结果格式化为一行,作为参数赋值给接收命令置换方式调用完成结果的变量。
最终查看变量的值得出想要的结果。
形式2:直接调用
函数名 参数1 参数2 ....
注意:要是以直接调用的方式,则进入子函数之后,每遇到一个标准输出语句,则会立即打印其结果至终端上进行显示。
通过$?来访问函数的返回值得到想要的结果。
注意:
1、函数以哪种方式调用都可以,查看函数调用的结果即可打印通过命令置换的方式赋值给接收调用函数值的变量来进行查看,也可通过函数内部进行return 最终在调用结束之后通过打印$?来获取函数的返回值。
2、函数返回值最大只能返回0-255这个闭区间之内的任何一个数字,超过255则会从0开始进行使用。eg:return 255 --->得到255 return 258 ---->得到2,但是内部使用的时候数值的结果不受范围的影响。