一.认识shell
1.什么是shell
Shell 是一个命令行解释器,,他为用户提供一个向Linux内核发送请求以便运行程序的界面系统,用户可以用shell来启动,挂起,关闭甚至停止编写一些程序.
2.shell的编写
1. shell以#!/bin/bash开头 (告诉系统用那个shell)
3.shell的执行
1. 让文件有可执行权限: chmod u=rxw 文件名
2. 执行
方式一:
- 相对路径: ./文件名称
- 绝对路径: ./etc/xx/xx
方式二:
不需要文件有可执行权限,直接:sh 文件路径
方式一用的比价多
二.shell的变量介绍
1.shell变量介绍
1.Linux Shell中变量分为系统变量和用户自定义变量
2.系统变量:系统定义好的:$HOME,$PWD,$PATH,$USER等,比如echo $PATH
![](https://i-blog.csdnimg.cn/blog_migrate/e9fa8412200f48da8082c4d0add39e4a.png)
3.查看系统所有环境变量: set
4.shell用户自定义变量:
1. 定义变量: 变量名=变量值
2. 撤销变量unset
3. 静态变量: 静态变量不能撤销
![](https://i-blog.csdnimg.cn/blog_migrate/b658dbf9b488bbcef4568bbb1d772fc4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ab5757e2e12885cff7ffa690e67e9372.png)
2.变量的命名规则
1.变量名称可以由字母,数字,下划线组成,但是不能以数字开头
2.等号两侧不能有空格
3.变量名一般习惯大写
3.将命令的返回值赋值给变量
1. A=`ls /home ` 将命令执行结构赋值给A, echo $A
2. A=$(ls /home) 等价于反引号 echo 'A=$A'
三.设置环境变量
1.基本语法
1.export 变量名=变量值 (将shell变量输出为一个环境变量)
2.source 配置文件 (刷新配置文件,让设置生效)
3.echo $变量名 (查询环境变量的值)
![](https://i-blog.csdnimg.cn/blog_migrate/db19f9b84fd1b8484c55466342d9f709.png)
![](https://i-blog.csdnimg.cn/blog_migrate/22825aaa699c45ae30bf5ff1684614b6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d6051cc26e595e7df54ac2f16466bd6b.png)
2.位置参数
1. 基本语法:$n(功能描述:n为数字,$0代表本身,$1~$9代表第一到第九个参数,十以上的参数需要用花括号包含${10},
2. $* 这个变量代表命令行中所有的参数,$*把所有参数看成一个和整体
3. $@这个变量也代表命令行中所有参数,不过把每个参数区分对待
4. $# 这个变量代表命令行所有参数的个数
![](https://i-blog.csdnimg.cn/blog_migrate/ec8399ae59d71410cf4e5d7f4b9176d4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d74a4204dac64e0a64ae9f96680fdc72.png)
四.预定义变量
shell设计者预先设计好的变量,可以在shell脚本中直接是使用:
1. $$ 当前进程号
2. $! 后台运行的最后一个进程的进程号
3.$? 最后一次执行命令返回的状态 0你代表执行成功,非0代表不正确
![](https://i-blog.csdnimg.cn/blog_migrate/60667767d0eabee5ca9ccc5d76cc5111.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e22e81de35525730cf4429af16bcd0cb.png)
五.运算符
1.基本语法
1. "$((运算式))" 或者 $[运算式]
2.expr m + n
注意:expr和运算符之间要有空格
3.expr m - n
4.expr \*,/,% 乘除取余,第一个值转义符
![](https://i-blog.csdnimg.cn/blog_migrate/03ab638cc8e9026362637c254b09e40e.png)
六.判断语句
1.基本语法
[condition] 注意condition前后要有空格
非空返回true,可使用$?验证(0为true,>1为false)
2.常用判断条件:
1.数字
-eq | 检测两个数是否相等,相等返回 true。 | [ $a -eq $b ] 返回 false。 |
-ne | 检测两个数是否不相等,不相等返回 true。 | [ $a -ne $b ] 返回 true。 |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true。 | [ $a -gt $b ] 返回 false。 |
-lt | 检测左边的数是否小于右边的,如果是,则返回 true。 | [ $a -lt $b ] 返回 true。 |
-ge | 检测左边的数是否大于等于右边的,如果是,则返回 true。 | [ $a -ge $b ] 返回 false。 |
-le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | [ $a -le $b ] 返回 true。 |
2.字符串
-b file | 检测文件是否是块设备文件,如果是,则返回 true。 | [ -b $file ] 返回 false。 |
-c file | 检测文件是否是字符设备文件,如果是,则返回 true。 | [ -c $file ] 返回 false。 |
-d file | 检测文件是否是目录,如果是,则返回 true。 | [ -d $file ] 返回 false。 |
-f file | 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 | [ -f $file ] 返回 true。 |
-g file | 检测文件是否设置了 SGID 位,如果是,则返回 true。 | [ -g $file ] 返回 false。 |
-k file | 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 | [ -k $file ] 返回 false。 |
-p file | 检测文件是否是有名管道,如果是,则返回 true。 | [ -p $file ] 返回 false。 |
-u file | 检测文件是否设置了 SUID 位,如果是,则返回 true。 | [ -u $file ] 返回 false。 |
-r file | 检测文件是否可读,如果是,则返回 true。 | [ -r $file ] 返回 true。 |
-w file | 检测文件是否可写,如果是,则返回 true。 | [ -w $file ] 返回 true。 |
-x file | 检测文件是否可执行,如果是,则返回 true。 | [ -x $file ] 返回 true。 |
-s file | 检测文件是否为空(文件大小是否大于0),不为空返回 true。 | [ -s $file ] 返回 true。 |
-e file | 检测文件(包括目录)是否存在,如果是,则返回 true。 | [ -e $file ] 返回 true。 |
实例:
![](https://i-blog.csdnimg.cn/blog_migrate/f473dfa628f0448d5af5f07342aa93f1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/63d835cc8bcbc5614452c9aaa661f86d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/fcda64b569f424f144a592020b668775.png)
七.流程控制
1.if流程控制
方式一:
if [condition];then
程序
fi
方式二:
if [condition]
then
程序
elif [condition]
then
程序
fi
2.case流程控制
case $变量名 in
"值1")
如果变量值等于值1执行这条语句
echo "xxx"
;;
"值2")
echo "yy"
如果变量值等于值2执行这条语句
;;
*)
其他所有变量值执行这条
;;
esac
![](https://i-blog.csdnimg.cn/blog_migrate/d09ca8a7d6d2b614e19c899ab4a5fb2e.png)
3.for循环流程控制
for 变量 in 值1 值2 值3
do
程序
done
和python一样,遍历
for((初始值,循环控制条件,变量变化))
do
程序
done
![](https://i-blog.csdnimg.cn/blog_migrate/0bca37dfde5b1c93b56fb63427187cc7.png)
4.while循环
while [condition]
do
程序
done
八.读取控制台输入
read (选项)(参数) 选项: -p:指定读取指时提示符 -t:指定读取是的等待的时间(秒)如果没有在指定时间内输入我就不等待了 参数: 变量:指定读取的变量名
九.函数
1.系统函数
1. basename 文件名 返回完整路径/后面的文件,成用于获取文件名 如果再加上文件后缀,可以返回文件名
2. dirname 和上面相反,返回的是除文件名外的绝对路径
![](https://i-blog.csdnimg.cn/blog_migrate/34bd66f9a9e977cc2387cc7cddc5d093.png)
2.自定义函数
function funcname()
{
Action
}
#定义的时候不要函数不需要形参,很奇怪的
调用:
![](https://i-blog.csdnimg.cn/blog_migrate/dff0df8fb2f767e4c0d8d18972c6c5f6.png)