二十六、shell基础与变量
今日内容:
shell 基础
1、介绍
2、变量
3、引导变量
一、shell介绍
shell是一门编程语言,用来解释执行这门编程语法的解释器
运行shell脚本权限:当前用户需要对脚本文件有rx权限
计算机体系结构控制流程:
命令>shell解释器>系统调用接口>内核>计算机硬件
1、一个shell脚本运行的三个步骤
1、先启动bash解释器;
2、bash解释器会把a.sh的内容从硬盘度入内容;
3、bash解释器会是被刚刚读入内容内容、解释执行shellshell代码;
2、运行脚本的两种方式
1>bash a.sh #bash脚本的文件路径,当前路径
2>/root/a.sh #绝对路径,所有路径
./a.sh #当前路径
3、shell语言的三大特点
解释型
弱类型
动态语言
二、变量
1、三连问
什么是变量
变:事物的状态是可以变化的
量:记录下事物的状态、数量
为何要用变量
为了让计算机能够像人一样,记下事物的状态,并且是可以改变的;
如何用变量
使用原则:先定义后使用引用
1>定义变量:
height=190
age=18
name=egon
2>访问变量:
echo $height
echo ${height}
3>修改变量
height=200
2、变量的三大组成部分
age=18
变量名:相当于门牌号,是用来访问变量值的;
赋值符:把变量值的地址绑定给变量名;
变量值:记录事物的状态,即存放到内存中的数据;
3、变量的命名
前提:在见名知意的前提下,尽可能的精简!
规则:
1、由字母、下划线组成,如:age_of_egon=20
2、不能以数字开头
3、不能使用关键字,比如命令
4、不要使用中文
4、变量值
整型:如年龄、等级、号码
age=18
浮点型:如薪资、身高、体重
salary=3.3
字符串:描述性质的状态,姓名、性别、爱好、国籍
msg="hello world"
msg='hello world'
5、变量的作用域
作用域:即生效的范围
全局作用域:在当前shell进程里有效,包括自定义变量;
set 查看所有变量(包括自定义和环境变量)
env 查看环境变量
系统定义的环境变量配置文件:
1、etc/profile
2、etc/bashrc
3、~/.bashrc
4、~/.bash_profile
在非登陆shell,即su egon时,执行的文件只有两个,顺序为:
1> ~/.bashrc 用户级
2> /etc/bashrc 系统级
6、if判断流程控制
if判断
if与结尾fi像是一个括号,一个整体,不可缺;
if判断分为三类:单分支、双分支、多分枝
1>单分支:单个条件
if 条件1;then &>/dev/null#结果不想要可直接丢入黑洞
代码1
...
fi
2>双分支:两个条件
if 条件1;then
代码1
...
else
代码1
...
fi
3>多分枝:多个条件
if 条件1;then
代码1
···
elif 条件1;then
代码1
代码2
···#n个条件后
fi
test命令
test 用于检查某个条件是否成立,它可以进行数值、字符、文件三个方面的测试
参数
-eq 等于则为真
-ne 不等于则为真
-gt 大于则为真
-ge 大于等于则为真
-lt 小于则为真
-le 小于等于则为真
利用if判断与test写一个shell脚本,例题:
输入成绩,90分以上为优秀,70分以上为良好,60分以上及格,60分以下为菜鸟:
vim if.sh
#!/bin/bash 要习惯性的加在首行
read -p '请输入分数>>>' x
if [ $x -ge 90 ];then
echo "优秀"
elif [ $x -ge 70 ];then
echo "良好"
elif [ $x -ge 60 ];then
echo "及格"
else
echo "菜鸟"
fi
7、符号对变量的影响
1>单引号 '' #强引用,在引号中都视为普通字符
可以说是所见即所得:即将单引号内的内容原样输出,或者描述为单引号里面看见的是什么就会输出什么。
2>双引号 "" #弱引用,在引号中保留变量
把双引号内的内容输出出来;如果内容中有命令,变量等,会先把变量,命令解析出结果,然后在输出最终内容来。
3>反引号 `` 与 $()
取命令的结果,$()支持嵌套,反引号不支持嵌套
4>惊叹号!与 ^ 相同,建议用!
取反
6>井号 #
注释
7>美元符号 $
取变量值
8>星号*
任意多个字符
9>下划线 _
无特殊作用,通常用语起名字
10>等号 =
赋值,判断相等性,等号左右必须有空格
11>管道 |
把一个进程的处理结果传递给另外一个进程或命令
12>右斜杠 \
转义命令,或转移特殊字符
13>单双小括号 ()、(())
单:命令组,命令替换;
双:整数扩展,常用语算数运算比较
14>单双中括号 []、[[]]
单:条件测试,与test命令相同,只能用-eq等参数来进行比较,不过可用转义以下再用:\>;还表示字符范围,[a-zA-Z],[1-9]
双:支持字符串的模式匹配,使用[[···]]判断条件结构,而不是[···],会报错
15>花括号 {}
匹配一组用逗号分隔的字符串中的任意一个,括号左边的所有字符称为前文,右边称为后文,前后文都是可选的,括号内不能包含不加引号的空白符;
16>百分号%、+、-
数学运算符
PS:在有变量的脚本或文件中,一定要注意双引号的使用,很多莫名的报错都是因为引号用错!
17> &
后台运行:echo 'hello';sleep 3;echo 'world' &
18>重定向
> >> 输出重定向,>覆盖, >>追加
< << 输入重定向
0标准输入
1标准正确输出
2标准错误输出
&标准正确和错误输出
19>问号?
表示任意一个字符
20>[0-9]、[A-Z]、[a-z]
范围中的任意一个字符
做事的逻辑步骤
接受用户输入的用户名
接受用户输入的密码
判断输入的用户名 等于 正确的用户名 并且 输入的密码 等于 正确的密码
告诉用户认证成功
结束
否则
告诉用户输入的账号或密码错误
shell脚本代码举例:
#!/bin/bash
read -p '请输入用户名:' a
read -p '请输入密码:' b
[ $a = 'egon' ] && [ $b = '123' ] && echo '登陆成功!' || echo '登录失败!'
8、while循环
9、for循环
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A0Z6E5Rg-1605189918570)(C:\Users\秋风、亦冷\AppData\Roaming\Typora\typora-user-images\image-20201112160727720.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VqDlK6ep-1605189918573)(C:\Users\秋风、亦冷\AppData\Roaming\Typora\typora-user-images\image-20201112170341232.png)]
给脚本提速,加个&,放入后台
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fZv2T8ws-1605189918584)(C:\Users\秋风、亦冷\AppData\Roaming\Typora\typora-user-images\image-20201112172245196.png)]