shell完整版教程

shell完整版教程

1. shell基础

shell是用户与Linux内核之间的解释器。

常见的shell解释器

/bin/bash 和 /bin/sh 和 /bin/csh 和 /bin/tcsh

解释器负责将用户的指令翻译为内核可以识别的指令。

通过usermod、chsh可以更改登录shell

1.1 bash的基本特性

快捷键、tab补齐

命令历史

命令别名

标准的输入输出的重定向(>、>>、2>、2>>、&>)

管道(|)(ll = ls -l)

复制代码
> 是先创建文件,再写内容(正确的信息)
>> 是追加东西
2> 可以将错误的信息加进去,但是会打不开那个文件

shell执行命令的方式

交互式(命令行):人工干预,逐条解释执行、效率低

非交互式(脚本):需要提前设计,批量执行、效率高

2. shell脚本

提前将可执行的命令语句写入一个文件(顺序执行、解释器逐行解释代码)。

一个合格规范的脚本包含(#!脚本声明(使用哪种解释器解释代码),注释信息(步骤、思路、用途等),以#开始的为注释信息,可执行语句)

执行脚本的多种方式:

需要为文件赋予可执行的权限(绝对路径、相对路径)

不需要文件有可执行权限(sh 脚本文件名,source 脚本文件名)不会启动子进程,通过pstree查看进程树即可。

3. 变量

定义变量:以固定的名称,存放可以能有变化的值。

定义变量的格式:变量名=变量值

取消变量的格式:unset 变量名

注意事项:=两边不能有空格,不要使用关键字做变量名,如ls,cd等

如果变量名已经存在则需要覆盖之前变量的值。

变量名称有:字母/数字/下划线组成,不能以数字开始(和其他语言一样)。

查看变量 v a r 或者 var或者 var或者{var}

位置变量:存储脚本执行时的参数

使用$n表示,n为数字序列号

如果大于9,需要花括号括起来

1 2 9 {11}

预定义变量

用来保存脚本程序的执行信息:直接使用这些变量,不能直接为这些变量赋值。

4. 变量的扩展应用

多种引号的区别

双引号:允许扩展,以$引用其他变量

单引号:禁用扩展,即便$也视为普通字符

反引号:把命令的执行输出作为变量值,$()与反引号等效。

双引号可以省略。

read命令定义变量

read -p "提示信息" varname

-p可选,-t可以指定超时的秒数,-s设置是否在终端显示输入的内容。

局部变量

√新定义的变量默认只在当前Shell环境中有效,无法在子Shell环境中使用

全局变量

√全局变量在当前Shell及子Shell环境中均有效(export定义就行)

5. shell中的运算

传统的加减乘除和取余数计算和C语言那些一模一样。

\] 或 \[\]或 \[\]或(())来放表达式。 自增,自减方法和其他语言一模一样。前面加let即可 小数运算的话, ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png) 非交互的话,用管道传递给bc去计算就行echo "" \| bc Ubuntu中不用安装bc,自带的 ### 6. 案例 监控信息(-n 不换行,-e 不显示信息) ### 7. 条件测试 需要脚本对各种情况做出判断(文件或者目录的读/写状态),数值的大小,字符串是否匹配,多条件组合 test测试操作: test 选项 参数,\[选项,参数

字符串的比较

注意方括号之间,开始和结束都要有空格的。

空格是在每一个var或者符号之间都要有。

整数值的比较

文件状态的比较

组合多条命令:用; && || 来组合

; 顺序执行命令

&&:仅当前一条命令执行成功才执行后一个

||:如果前一个执行成功,就不执行后面的了,如果失败则执行后一个命令

多条件判断:和其他语言类似

监控脚本

tr -s 删除多余重复的字符串

cut过滤数据

8. if语句

判断方式和其他语言一样,格式如下:

-z 判断字符串为空 !-z 判断字符串是非空

if双分支判断语法

if的多分支判断

9. for循环

echo {1...n} 表示1到n的所有值

10. while循环

...(img-vLuGBIha-1748586968860)]

if的多分支判断

外链图片转存中...(img-FOKSR6rq-1748586968861)

9. for循环

外链图片转存中...(img-izwCJ7JJ-1748586968861)

echo {1...n} 表示1到n的所有值

10. while循环

相关推荐
酒尘&18 分钟前
JS数组不止Array!索引集合类全面解析
开发语言·前端·javascript·学习·js
学历真的很重要42 分钟前
VsCode+Roo Code+Gemini 2.5 Pro+Gemini Balance AI辅助编程环境搭建(理论上通过多个Api Key负载均衡达到无限免费Gemini 2.5 Pro)
前端·人工智能·vscode·后端·语言模型·负载均衡·ai编程
用户47949283569152 小时前
"讲讲原型链" —— 面试官最爱问的 JavaScript 基础
前端·javascript·面试
用户47949283569152 小时前
2025 年 TC39 都在忙什么?Import Bytes、Iterator Chunking 来了
前端·javascript·面试
John_ToDebug2 小时前
深度解析 Chromium 浏览器 UI 刷新机制与 ThemeService 的核心作用
chrome·windows·ui
大怪v3 小时前
【Virtual World 04】我们的目标,无限宇宙!!
前端·javascript·代码规范
狂炫冰美式3 小时前
不谈技术,搞点文化 🧀 —— 从复活一句明代残诗破局产品迭代
前端·人工智能·后端
林鸿群4 小时前
window编译chromium源码
chrome·chromium·源码编译
xw54 小时前
npm几个实用命令
前端·npm
!win !4 小时前
npm几个实用命令
前端·npm