二十六、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)]

posted @ 2022-06-09 18:19  秋风お亦冷  阅读(29)  评论(0编辑  收藏  举报