当前位置: 首页 > news >正文

Linux shell学习(更新中....)

一、SHELL的概述

shell作用是解释,是底层操作系统核心和外界交流的基础,本质上是一个命令行的解释器,它接受应用程序/用户命令,然后调用操作系统内核。

shell还是一个功能相当强大的编程语言,易编写、易调试、灵活性强。

二、写一个SEHLL脚本

格式:

​ 默认后缀是.sh,什么后缀无所谓,重点是约定俗称。

开头#!/bin/sh 表示当前指定使用的解释器。

#(井号)后面的是注释

每一行代表一个一个命令

三、执行一个shell脚本

1、sh+脚本的路径 (可以是相对路径也可以是绝对路径) 创建了一个新的shell去执行

2、bash+脚本的路径(可以是相对路径也可以是绝对路径) 创建了一个新的shell去执行 (可以bash以后 使用ps -f验证)

3、直接执行脚本文件(./脚本文件路径) 创建了一个新的shell去执行

4、source 脚本路径 当前shell执行

5、. 脚本路径(.是一个命令) 当前shell执行

6、将其cp到/bin/目录下就可以当做命令来执行。

7、系统是直接可以执行的命令都是在$PATH指定出来的目录下的命令

在这里插入图片描述

!! source 命令是指明配置环境变量

子shell中设置的一些环境变量在父shell中是不可见的,对于父shell中的变量,子shell 的更改是不会改变父shell 的变量

四、变量

​ shell中的变量可以分为两大类,第一类就是系统预定义的变量,第二类就是用户自定义变量 ,每一类还可以分为全局的变量和局部的变量。

4.1系统预定义变量

$HOME $PWD $SHELL $USER 等

可以直接使用echo进行查看

echo $HOME 		#用户信息
env        		#查看全部环境变量
printenv  USER 	#查看user变量
set             #查看当前的所有环境变量

使用变量的值的时候,都需要加上$()符号。

4.2自定义变量

​ 定义变量:变量名=变量值 (=前后不可以有空格,声明的属于是局部变量)(局部变量export以后可以提升为全局变量)

​ 撤销变量:unset 变量名

​ 声明静态变量:readnoly变量 (不可以unset撤销)

变量命名规则:

​ 1、最好使用小写,因为一般系统定义的变量是大写,等号两边不可以有空格

​ 2、都是按照字符串去处理的,不是数字运算

​ 3、可以使用(())或者是(())或者是(())或者是[]表示运算$[]只在shell 1.x版本中可以使用,后面的版本中就被舍弃了

​ 4、可以定义只读变量 readonly name=value (相当于定义了一个常量)

4.3特殊变量

1、$n n是1-9的数字

​ $0表示脚本名称 $1-9表示传入的第n个变量,十以上的变量需要用花括号括起来9表示传入的第n个变量 ,十以上的变量需要用花括号括起来9表示传入的第n个变量,十以上的变量需要用花括号括起来{n}

2、$#

​ 获取当前输入参数的个数

3、$*

​ 代表命令行中的所有参数,把所有的参数看成一个整体**(使用双引号引起来以后是一个参数)**

4、$@

​ 命令行中的所有参数,但是每个参数区分对待

5、$?

​ 最后一次执行命令的返回状态,0表示最后一个命令正常执行,如果这个变量非0表示前面一个命令执行不正确

五、运算符

expr命令

expr 1 + 2   #返回1+2的值
expr 5 \* 2  #返回5*2的值
a=$(expr 1 + 2) #将1+2的值赋值给a
a='expr 1 + 2'  #将1+2的值赋值给a

(())或者是(())或者是(())或者是[]

$((5*2))  #双小括号可以进行数字判断
$[5*2]    #shell  1.x版本的语法 后面就被舍弃了

六、条件判断

标准格式

[ condition ] 方括号表示进行条件判断(注意方括号两边都有一个空格

两个整数比较

-eq 等于(equal) -ne 不等于(not equal)

-lt 小于(less than) -le小于等于(less equal)

-gt 大于(greater than) -ge大于等于(greater equal)

判断文件权限

-r 是否可读

-w是否可写

-x是否可执行

判断文件类型(判断文件是否存在)

-e文件是否存在

-f文件是否存在并且是一个常规文件

-d文件是否存在并且是一个目录

多条件判断

使用逻辑|| 或者是 逻辑 &&

||表示前一个命令执行失败以后再执行下一个命令

&&表示上一个命令执行成 功以后再执行下一条命令

七、流程控制

可以使用let命令 在后面就可以使用常用的c语言运算了。

let i+=1
let i++   #注意符号两边不要加空格

7.1 if判断

单分支:

if [ condition ];then#程序
fiif [condition]
then#程序
fi

多分支:

if [ condition ]
then#程序1
elif[ condition ]
then#程序2
else#程序3
fiif [ condition ];then#程序1
elif[ condition ];then#程序2
else#程序3
fi

只有if以后需要加上then,else后面不需要加then

对于if判断,同样可以使用逻辑或||或者是逻辑与&&

在同一个括号中进行逻辑与是-a, 逻辑或是 -o

7.2 case语句

case $变量名 in
"值1")
;;
"值2")
;;
#其他分支
*)#默认分支
;;
esac   #结束标志

7.3 for循环

for ((初始值;循环控制条件;变量变化))
do#程序
done#示例 一个求和脚本
#!/bin/bashecho "请输入一个数字"
read number
sum=0
for((i=1;i<=$number;i++))
dosum=$(($sum+$i))
done
echo $sumfor 变量 in 序列 
do#程序
done
//例程
for os in linux windows macos;
do echo $os
donefor i in {1..100}
doecho $i
done

7.4 while循环

while [ condition ]
do#程序
done

7.5 read读取控制台输入

read (选项) (参数)

选项:

​ -p :指定读取值时的提示符

​ -t:指定读取值时的等待时间,如果不加-t的话移植等待。

read -t 7 -p "please enter you name:"  name   
#等待7秒,并输出提示符"please enter you name:"

八、函数

​ 函数就是能够实现某种方法的指令集合。

8.1系统函数

一些常用的系统函数,持续更新…

date    	#获取当时系统时间
date +%s 	#获取当前系统时间戳basename[string/pathname][suffix]   #取路径中文件的名称 会将suffix的后缀去掉,前面是pathname 截取当前路径最后一个斜杠之后的字符串#获取当前文件的路径名称 截取最后一个斜杠之前的命令 通常搭配pwd使用
dirname  

8.2自定义函数

在调用函数之前,必须要声明函数。因为shell脚本是逐行运行,不会像其他语言一样先编译。

函数返回值只能通过$?系统变量获取

[function]funname[()]   #[]中可以省略
{Action;[return int;]
}
#返回值只能是0-255  可以使用echo打印结果,通过$()来接受命令结果
function add(){S=$(($1+$2))echo "和:"$(S)
}
read -p "请输入第一个整数:" a
read -p "请输入第二个整数:" b
add $a $b

九、综合应用

#!/bin/bash
#判断输入参数是否为1
if [ $# -ne 1 ]
then echo "参数个数错误!应该输入一个参数,作为归档目录名"exit
fi
#从参数中获取目录名称
if [ -d $1 ]
then echo
elseecho echo "目录不存在"echoexit
fiDIR_NAME=$(basename $1)
DIR_PATH=$(cd $(dirname $1);pwd)#获取当前年月日
DATE=$(date +%y%m%d)
#定义归档文件名称和目标路径
FILE=achive_${DIR_NAME}_$DATE.tar.gz
DEST=/home/lijiaxi/archive/$FILE
#开始归档目录文件
echo "开始归档......"
echo
sudo tar -czf $DEST $DIR_PATH/$DIR_NAMEif [ $? -eq 0 ]
thenechoecho "归档成功"echo "归档文件为:$DESt"echo
elseecho "归档出现问题"echo
fi
exit

十、正则表达式

正则表达式是使用单个字符串来描述、匹配一系列符合某种语法规则的字符串

‘^’ 匹配一行的开头,^a匹配所有以a开头的行

'′匹配一行的结束a' 匹配一行的结束 a匹配一行的结束a匹配所有的以a结尾的

‘.’ 匹配任意的一个字符 r…t匹配所有的r t中间有两个字母的行

‘*’ 匹配前面一个字符出现多次 o*表示o出现多次

正则表达式可以搭配使用

字符区间 [6,8] 匹配6或者8

[0-9] 匹配0-9的数

[0-9]*任意长度的数字串

[a-z]匹配a-z的字符

[a-a]*匹配任意长度的字符串

\转义字符,必需搭配单引号使用’/$’

有扩展的正则表达式,可以查阅相关资料

十一、文本处理工具

cut [选项参数] filename

选项参数可选

​ -f 列号

​ -d 分隔符

​ -c 按照字符切割 后面加n表示第几行

awk [选项参数] ‘/pattern/{action1} /pattern2/{action2}…’ filename

​ pattern:表示匹配模式

​ action:表示找到匹配内容以后的一系列命令

​ -F 指定输入文件分割符

​ -v 赋值一个用户定义变量

http://www.dtcms.com/a/457010.html

相关文章:

  • 自动生成API文档与故障排查决策树的NLP应用
  • 手机怎么制作钓鱼网站建设文明网 联盟网站的
  • Rust 的类型自动解引用:隐藏在人体工学设计中的魔法
  • AVX-512深度实现分析:从原理到LLaMA.cpp的性能优化艺术
  • 前端玩转大模型,DeepSeek-R1 蒸馏 Llama 模型的 Bedrock 部署
  • 计算机网络-运输层
  • OSPF协议详解5:实验 - 计时器、度量值与其他高级配置
  • OpenCV(五):鼠标控制
  • Linux中权限系统
  • 网站域名到期后果四川人力资源考试官网二建
  • python爬虫(五) ---- Pyinstaller打包Python程序为exe文件及遇到的问题
  • 沈阳做网站价格自己做网站要学什么
  • 深入浅出ArkTS:HarmonyOS应用开发的现代化语法解析
  • UVa 204 Robot Crash
  • 2025 完整指南:Gemini 2.5 Computer Use 模型 - AI Agent 界面控制的革命性突破
  • 云南网站建设专业品牌网站域名怎么转
  • Vue项目中如何实现表格选中数据的 Excel 导出
  • 【多模态学习】QA7: GRPO算法?KL散度指的是什么?什么叫做长思维连冷启动?模型退火是什么意思?
  • 无人机_鲁棒性
  • 用自己的计算机做服务器建网站海外模板网站有哪些
  • 检测MODBUS通讯连接 (MODBUS POLL)
  • 数据结构(陈越,何钦铭)期末考试
  • 接口测试-Postman的关联
  • 重庆网站建设快忻科技国外h5汇总网站
  • 解决 LÖVE 引擎 liblua.so.5.4 库缺失问题
  • 从原始数据到实时防御:与 John Hammond 的对话
  • JavaScript事件流:冒泡与捕获的深度解析
  • 避免网站侵权免费域名申请 freenom最新
  • 【C++进阶】---- 红黑树实现
  • 【多模态学习】QA6: 什么是MOE架构?Router Z Loss函数是指什么?