Shell 脚本
书写
开头第一行可以以#! /bin/bash
开头也可以不写,保存后的文件名可以以.sh
结尾也可以不写,Linux系统会自动对文件类型进行识别。
运行
执行shell sh test1.sh
这种执行方式可以不设置文件的属主还有权限,属于调用shell给它参数然后执行参数内的脚本。
sh < text
为文本输入。
shell环境变量
$* 所有命令行参数的值 $# 命令行参数的总数 $$ 当前进程的进程ID(PID) $? 最后执行的一条命令的退出状态,返回值为0则成功,非0则失败 $! 在后台运行的最后一个进程的进程ID
位置参数
共有10个位置参数,依次是:$0 ,$1 ,$2 ,$3 ,$4 ,$5 ,$6 ,$7 ,$8 ,$9
,其中 $0 始终表示命令名或shell脚本名。
用set
给位置参数赋值
set a b c
执行结果是把字符串a赋值给2 ...依次赋值。但$0
不能利用set命令赋值,因为它始终是命令名。
用shift
移动位置参数
shift 4
把位置参数左移4位。
如果没有带参数,默认值为1。
用户自定义变量
shell脚本中的用户自定义变量拥有临时的存储空间。
在shell编程语言中无需声明和初始化shell变量。
一个未初始化的shell变量,其默认的初始值为空字符串。
格式:
mkdir=/home/zzm
。
如果赋值给变量的值中有空格、制表符或换行符,要用引号把字符串包起来。
赋值语句可以出现多个赋值,变量赋值可以迭代进行。各赋值动作是从右向左实现的。A = $B B=$C C=hello
。
使用变量:
在变量前面加一个$符。
如果出现在长字符串中要使用{}
把变量名包括起来。
shell中的特殊字符
* 匹配任意一个字符串 ? 匹配任意一个字符 [] 方括号中有一个字符组,匹配该字符组所限定的任何一个字符 ! 表示不再一对方括号中的字符
双引号
除$,倒引号和反斜线(\)仍保留其特殊功能外,其余字符作为普通字符对待。
倒引号
- shell解释执行
- 利用倒引号的shell解释功能可以进行命令替换,即把倒引号中的命令的结果赋值给指定变量。
执行顺序操作符
顺序分隔符 ; 多条命令可以在多行中键入,也可以将这些命令在一行中输入,但各条命令应以分好隔开 管道线 | 也是顺序执行
执行顺序操作符
逻辑与&&
把两个或两个以上的命令联系在一起。
第一个命令成功才运行后面的命令。命令执行成功返回值为0,失败为非0。
执行顺序操作符
逻辑或||
把两个或两个以上的命令联系在一起。
第一个成功则不运行第二个。
注释符,反斜线
# 注释符 \ 反斜线 把特殊字符变为普通字符。 & 后台操作符
输入输出命令
shell参数意义
$0 shell本身文件名 $? 最后运行命令的返回值 $! shell最后运行的后台process的PID $$ shell本身的pid $# shell的参数个数 $@ 所有参数列表, 以"$1 $2 … $n"的形式输出所有参数,此选项参数可超过9个 $* 所有参数列表, 以"$1" "$2" … "$n" 的形式输出所有参数
有什么不同见解可以在评论区共同讨论
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下