介绍:shell是一个命令行解释器,通过接收应用程序/用户命令,调用操作系统内核。
1.创建一个sh脚本并进行编辑
touch b.sh
vim b.sh
2.开头指定解析器并写入内容
#!/bin/bash
echo "hello"
3.赋予脚本执行权限并执行
chmod +x b.sh
./b.sh (打开一个子shell)
. b.sh (在当前shell里执行,无需打开子shell)
子shell设置的变量,父shell不可见
4.查看系统变量的值
echo $ HOME
5.自定义变量
变量名=变量值(=前后不可有空格)
撤销变量:unset 变量名
静态变量: readonly 变量名(不可unset)
定义临时全局变量:export 变量名
6.定义规则
(1)不能以数字开头
(2)环境变量建议大写
(3)等号左右不能有空格
(4)如果有空格,需要单引号或者双引号
(5)变量值默认都是字符串,不能直接数值计算
7.特殊变量
$n
n:0表示脚本名称(如果没有创建子shell就会显示bash),1-9表示第1-9个参数,如果n>9,需要加花括号:${10}
8.参数变量
$*:代表命令行中所有参数,把所有参数看做了整体(具体指for i in "$*"这种情况)
$@:代表命令行中所有参数,把每个参数区分对待
9.判断执行最后一次命令的状态
$?:如果返回0,说明上一次命令正确执行,不为0的话(可以自己定义)上一条命令没有被正确执行
10.运算符
O=$[5*5+6]
11.条件判断
[ condition ]:如果condition非空也为true,注意condition前后要有空格
[ 7 -eq 7 ] \ echo $? 输出为0
多条件判断: [ fly ] && echo hello || echo haha
12.流程控制
(1)
if [ condition ]
then
程序
elif [ condition ]
then
程序
else
程序
fi
if后面的空格不可以少,有if才有then
(2)
case $n in
"值1")
程序
;;
"值2")
程序
;;
*)
程序
;;
esac
case那行要以in结尾,;;代表一个条件的结束,*代表默认default
(3)
sum=0
for ((i=0;i<4;i++))
do
sum=$[$sum+$i]
done
for 变量 in 值1 值2 值3
do
程序
done
(4)
while [ condition ]
do
程序
done
13.读取控制台输入
read -t n(等待读取的时间,不写则一直等待) -p "enter anything" o
echo $o
14.取路径里的文件名称
basename 路径名 suffix(想要去掉的后缀)
basename $0 .sh 输出:a
15.取绝对路径
dirname 文件绝对路径
16.自定义函数
funciton 函数名(){
函数体
}
17.正则表达式
^a:匹配以a开头的所有行
a$:匹配以a结尾的所有行
.:匹配任意一个字符
a*:后面有任意多个a
[1,2]:匹配1或者2
[1-9]:匹配1-9中的数字
'\$':匹配$(要用单引号括起来)
18.文本处理工具
(1)cut -d " "(选定分隔符,默认为制表符"\t") -f n(选定第n列) 文件名
从文件中以空格为分隔符切割出第n列的内容
(2)awk -F " "(选定分隔符,默认为空格) -v i=1(赋值一个用户定义变量) '/pattern1/{action1} /pattern2/{action2}...' 文件名
内置变量:FILENAME(文件名),NR(行数),NF(列数)
BEGIN和END:在首行和末行添加内容
(3)sed [options] 'command' file(s)
(g是替换每行所有,不加只替换每行第一个)
B站教程:3天搞定Linux,1天搞定Shell
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具