一、Shell基础知识详解
1.1 认识Shell环境
为什么学习shell编程
Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具,Linux/UNIX系统的底层及基础应用软件的核心大部分涉及Shell脚本的内容
每一个合格的Linux系统管理员或运维工程师,都需要熟练的编写Shell脚本语言,并能够阅读系统及各类软件附带的Shell脚本内容
只有这样才能提升运维人员的工作效率,适应日益复杂的工作环境,减少不必要的重复工作,从而为个人的职场发展奠定较好的基础
| 学好Shell编程所需的基础知识
-
能够熟练使用vim编辑器,熟悉SSH终端 -
有一定的Linux命令基础,至少需要掌握80个以上Linux常用命令,并能够熟练使用它。 -
要熟练掌握Linux正则表达式及三剑客命令(grep,sed,awk)
| 如何学好Shel编程
-
学好Shel编程的核心:多练-->多思考-->再练-->再思考,坚持如此循环即可! -
新手大忌:不可拿来主义,可以模仿,但是要自己嚼烂了吃下去。 -
格言:你觉得会了并不一定会了,你认为对的并不一定对的。
专业角度看Shell
-
Shell是一个命令解释器,它在操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出屏幕返回给用户 -
这种对话方式可以是: -
交互的方式:从键盘输入命令,通过/bin/bash的解释器,可以立即得到shell的回应 -
非交互的方式:脚本
-
常见的Shell类型
目前主流的Shell包括:
-
-
Bourne Shell ( /usr/bin/sh
或/bin/sh
)
-
-
-
Bourne Again Shell ( /bin/bash
)
-
-
-
C Shell ( /usr/bin/csh
)
-
-
-
K Shell ( /usr/bin/ksh
)
-
-
-
Shell for Root ( /sbin/sh
)
-
在实际工作中,最常用的是Bash(Bourne Again Shell),它因易用性和开源特性被广泛应用,也是大多数Linux系统的默认Shell环境。
1.2 Shell编程规范
编写Shell脚本需要注意什么?
编写高质量Shell脚本需遵循以下规范:
-
-
脚本命名:采用英文字母(大小写皆可),后缀为 .sh
-
-
-
避免使用特殊符号、空格等命名
-
-
-
脚本名称应当一目了然,表明功能
-
-
-
脚本首行必须以 #!/bin/bash
开头声明解释器
-
-
-
变量命名不能以数字或特殊符号开头,可使用下划线(_),但不能使用破折号(-)
-
1.3 创建第一个Shell脚本
如何Shell编程
-
重点掌握前面的内容:变量、判断、bash,对它们彻底理解 -
先看懂,读懂shell脚本 -
讲完判断,将前面学过的脚本进行完善 -
自己写简单的脚本,如一些小的项目:生活中:随机点餐、大保健、会员办理,消费、服务 对应价格不同 结账 会员账号 密码 密码丢失 -
有基本适合自己的教材,如:跟老男孩学习Shell编程或者完善的文档 -
不能拿来及用,要搞懂、变成自己的,吸收了后可以解决企业中大部分的shell问题
一个shell脚本
# cat test.sh
#!/bin/bash
echo "Hello World!"
| 执行脚本的三种常用的方式
# sh test.sh
Hello World!
# bash test.sh
Hello World!
(2)使用路径方式
全路径执行方式或者当前路径,必须给x权限
# chmod +x test.sh
# /server/scripts/test.sh
Hello World!
# ./test.sh
Hello World!
(3)使用source或者 . 的方式
# . test.sh
Hello World!
# source test.sh
Hello World!
(4)其他shell的执行方式
# cat test.sh | bash
Hello World!
# echo ls | bash
test.sh
# bash < test.sh
Hello World!
shell变量基础
| 什么是变量
shell变量是一种很“弱”的变量,默认情况下,一个变量保存一个串,shell不关心这个串是什么含义,所以若要进行数学运算,必须使用一些命令例如let、declare、expr、双括号等。
shell变量可分为两类:局部变量和环境变量
- 局部变量只在创建它们的shell中可用
- 环境变量则可以在创建它们的shell及其派生出来的任意子进程中使用
有些变量是用户创建的,其他的则是专用shell变量
- 变量名必须以字母或下划线字符开头,其余的字符可以是字母、数字(0~9)或下划线字符
- 变量名字是大小写敏感的,环境变量推荐设置为字母大写
- 给变量赋值时,等号周围不能有任何空白符,为了给变量赋空值,可以在等号后跟一个换行符
变量删除:用set命令可以查看所有的变量,unset var命令可以清除变量var,var相当于没有定义过
变量只读:readonly var可以把var变为只读变量,定义之后不能对var进行任何更改
对shell变量的引用方式很多,用这些方式可以方便的获取shell变量的值,变量值的长度,变量的一个字串,变量被部分替换后的值等等。
| 变量值的定义
字符串定义
# name=Iamlizhenya
# name='I am lizhenya'
# name="I am lizhenya"
# echo $name
I am lizhenya
双引号和单引号的区别:双引号解析变量,单引号所见即所得不能解析变量,不加引号可以解析变量
数字的定义
# age="12 23 432"
# echo $age
12 23 432
命令的定义
通过``调用命令
# date +%F-%H-%M-%S
2022-07-07-18-02-34
# time=`date +%F-%H-%M-%S`
# echo $time
2022-07-07-18-02-40
# 时间是固定 每次调用都相同
# echo $time
2022-07-07-18-02-40
通过$()调用命令
# time=$(date +%F-%H-%M-%S)
# echo $time
2022-07-07-18-02-52
| 变量可以定义变量
# ip=`ifconfig eth0|awk 'NR==2{print $2}'`
# echo $ip
10.0.0.7
# dir=${ip}_${time}
# echo $dir
10.0.0.7_2022-07-07-18-11-34
当shell脚本中出现2条以上相同的命令就将它们写成变量
| 核心位置变量
echo hehe...........
原文始发于微信公众号(Z2O安全攻防):Linux Shell:从入门到‘删库跑路’
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论