Linux基础9--shell入门
Shell概述
-
shell连接了用户和Linux内核,它可以解释用户输入的命令传递给内核,让用户可以更加方便的使用Linux系统
-
shell 本身并不是内核的一部分,它只是站在内核的基础上编写的一个应用程序
-
shell具备编程的能力,shell也是一种语言,C,C++,java,Python,Go等
-
语言分为编译型语言,C,C++,Go,需要提前编译,编译语言都有编译器
-
解释型语言,shell,Python,php,不需要提前编译,一边执行,一边解释,每种解释型语言都有解释器
-
-
-
按需求整理好每一个步骤,先做什么,后做什么
-
运行脚本,并根据运行结果排除错误
-
脚本的执行方式
方法一:赋予脚本执行权限后,可用绝对路径或当前路径执行
方法二:调用解释器执行脚本文件
常用特殊符号补充
" " #双引号,引用整体
‘ ’ #单引号,引用整体并取消所有特殊字符含义
$[] #四则运算
$() #将命令的输出结果作为参数
· · #反撇,将命令的输出结果作为参数
变量
以固定的名称存放可能变化的值,提高脚本的灵活度来适应多变的环境
定义变量:变量名=变量值(等号两边不要有空格)
取消变量:unset 变量名
定义变量注意事项:
变量名由字母、数字、下划线组成,区分大小写,不能以数字开头,不要使用命令和特殊符号
若指定的变量名已存在,相当于为此变量重新赋值
read标准输入取值
read读取用户在键盘上输入的内容,并把内容放在变量里,可以降低脚本的使用难度
命令格式:read -p "提示信息" 变量名
变量种类
环境变量:变量名一般都大写,用来设置用户/系统变量
位置变量:bash内置,存储执行脚本时提供的命令参数
预定义变量:bash内置,可直接调用的特殊值,不能直接修改
自定义变量:用户自定义
env命令查看系统所有环境变量
set命令查看系统所有变量,包括用户自定义变量
获取变量值:echo $SHELL
位置变量:
$0 #脚本名称
$1 #第一个参数
$n #第n个参数
预定义变量
$0 #脚本本身
$* #显示所有参数内容
$# #显示有多少个参数
$? #显示上一条命令的执行结果(0正确,非0错误)
$$ #显示脚本进程号(PID)
判断文件状态
-e #判断文档(文件/目录)是否存在,存在为真
-d #判断目录是否存在,存在为真
-f #判断文件是否存在,存在为真
-r #可读为真
-w #可写为真
-x #可执行为真
格式:[ -e /etc/ ] #两边都要留空格
整数比较
-gt #大于
-ge #大于等于
-eq #等于
-lt #小于
-le #小于等于
-ne #不等于
字符串比较
== #相等
!= #不相等
常用数值运算方式
$[] #四则运算: echo $[10+5]
$(()) #数值运算工具:echo $((10+5))
expr #数值运算工具:echo `expr 2 + 3`每一部分都要有空格
let #数值运算工具:需要将运算的结果赋予一个变量存储
[root@localhost ~]# let a=10+5
[root@localhost ~]# echo $a
let简写: let i++ let i-- let i+=2
let完整表达式:let i=i+1 leti=i-1 let i=i+2
字符串判断:
-z #字符串的值为空为真
-n #字符串的值非空为真(相当于 ! -z)
#判断时每一部分要有空格
[root@localhost ~]# [ -z /etc/passwd ]
条件判断结构
当条件满足时执行什么操作,当条件不满足时执行什么操作
&& #逻辑与(并且)
|| #逻辑或(或者)
; #条件之间没有逻辑关系
A && B #当A命令执行成功后才会执行B,如果A执行失败则B不执行
A || B #当A命令执行失败后才会执行B,如果A执行成功则B不执行
A ; B #执行A命令后执行B,两者没有逻辑关系
if条件判断结构
if单分支语句,只能判断对,不能判断错
#第一种语法结构
if [条件判断];then
条件成立时,执行的命令
fi
#第二种语法结构
if [条件判断]
then
条件成立时,执行的命令
fi
if双分支语句
if [条件判断];then
条件成立时,执行命令a
else
条件不成立时,执行命令b
fi
if多分支语句
if [条件判断1];then
条件1成立时,执行命令a
elif [条件判断2];then
条件2成立时,执行命令b
elif [条件判断3];then
条件3成立时,执行命令c
...省略更多条件
else
所有条件都不成立时,执行命令d
fi
case条件判断结构
case从变量中取值,如果变量中的值与预设的值不匹配,则执行对应的命令
#case语法结构
case #变量名 in
值1)
执行的命令;; #如果变量中的值等于值1执行的命令
值2)
执行的命令;; #如果变量中的值等于值2执行的命令
...省略其他分支
*)
执行的命令zz;; #如果变量中的值都不是以上的值,则执行的命令
esac
for循环
for循环处理,根据变量的取值,重复执行xx命令
#for循环语法结构
for 变量名 in 值1 值2 值3 ...
do
执行的命令
done
#测试企业的服务器联动性
#!/bin/bash
for i in `seq 254`
do
ping -c2 -i0.1 -W1 192.168.0.$i &> /dev/null
#-c选项控制ping测试的次数
#-i选项,控制多次ping测试的间隔时间,默认为1秒
#-W选项,可以控制超时时间
if [ $? -eq 0 ];then
echo "192.168.0.$i UP" >> up.txt
else
echo "192.168.0.$i" DOWN >> down.txt
fi
done
while循环
死循环,只要条件成立就重复执行命令
#while循环语法结构
while 条件判断
do
执行的命令
done
#使用while循环编写一个测试整个网段IP地址的联通性脚本
#!/bin/bash
i=1 #定义一个变量
while [ $i -le 254 ] #循环判断变量的值小于等于254
do
IP="192.168.0.$i" #定义一个变量
ping -c2 -i0.1 -W1 $IP &> /dev/null #输出结果不要
if [ $? -eq 0 ];then #判断上一条命令的结果,如果上一条命令的结果等于0
echo "$IP UP" #输出主机UP
else
echo "$IP DOWN" #输出主机DOWN
fi
let i++ #对变量的值自加1
done
shell函数
在shell环境中,将一些需要重复使用的操作,定义为公共的语句块,即可称为函数
函数可以使脚本中的代码更加简洁,增强易读性,提高脚本的执行效率
#函数定义格式1
function 函数名 {
执行的命令1
执行的命令2
...
}
#函数定义格式2
函数名() {
执行的命令1
执行的命令2
...
}
脚本中断及退出
break #结束整个循环
continue #结束本次循环,进入下一次循环
exit #退出脚本
字符串截取
常用方法:${变量名:起始位置:长度}
${}截取字符串时,起始位置是从0开始的
字符串替换
命令:${变量名/xx/yy} #只替换第一个匹配的结果
${变量名//xx/yy} #替换全部匹配的结果
字符串掐头去尾
从左向右,最短匹配删除:${变量名#*关键词}
从左向右,最长匹配删除:${变量名##*关键词}
从右向左,最短匹配删除:${变量名%关键词*}
从右向左,最长匹配删除:${变量名%%关键词*}
#字符串去尾方式批量修改文件扩展名
#!/bin/bash
for i in `ls *.doc`
do
mv $i ${i%doc}txt
done
shell数组
定义数组方式1:数组名=(值1 值2 值3 ... 值n)
#获取数组内所有值:echo ${数组名[@]}
定义数组方式2:数组名[下标]=值
正则表达式
正则表达式使用一串符号描述有共同属性的数据
基本正则符号 | 描述 | 示例 |
^ | 匹配行首 | grep "^root" /etc/passwd |
$ | 匹配行尾 | grep "bash$" /etc/passwd |
[] | 集合,匹配集合中的任意单个字符 | grep "ro[acto]" /etc/passwd |
[^] | 对集合取反 | grep "ro[^ab]" /etc/passwd |
. | 匹配任意单个字符 | grep "roo." /etc/passwd |
* | 匹配前一个字符出现的任意次数(不允许单独使用) | grep "w.*" /etc/passwd |
{n,m} | 匹配前一个字符n到m次(首先匹配m次) | grep "a\{1,\}" /etc/passwd |
{n} | 匹配前一个字符n次 | grep "o\{2\}" /etc/passwd |
扩展正则符号 | 描述 | 示例 |
+ | 最少匹配一次(前一个字符出现的次数) | egrep "a+" 1.txt |
? | 最多匹配一次(前一个字符出现的次数) | egrep "a?b" 1.txt |
{n,m} | 匹配n到m次(前一个字符出现的次数) | egrep "a{2,4}b" 1.txt |
() | 组合为整体,保留 | egrep (ab) 1.txt |
| | 或者 | egrep "ab|abc|aab" 1.txt |
\b | 单词边界 | egrep "\bthe\b" 1.txt |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律