[ 解析器 和 调用 ]
- 文件首行指定解析器,默认解析器可省略不写
- 通过 sh 或者 bash 命令调用 shell 脚本
echo "hello world"
$ sh hello.sh
- 给脚本文件添加执行权限后,调用时可省略 sh 或者 bash
$ chmod 777 hello.sh
./hello.sh
[ 变量 ]
[ 常用的系统变量 ]
[ 自定义变量 ]
- A=1 // 直接定义复制,等号两侧不能有括号
- echo $A // 调取变量时需要用 $ 符号
- 变量区分大小写
- unset A // unset 命令可以释放变量
- readonly X=123 // readonly 定义静态变量,该变量无法被重新赋值,无法被释放
- export D // 将变量 D 提升为全局变量
[ 特殊变量 ]
- $n // n 为数字,$0 代表脚本自身,$1-9 代表前9个参数,大于9的需要用大括号包裹数字,如 $
- $# // 代表输入参数的个数,不包括 $0 ,例如 sh hello.sh 1,这里的 $# 就为 1
echo $
$ sh hello.sh a b c
- $* 和 $@,都表示所有参数,区别在于,用双引号包裹起来后,"$*" 会成为一个整体,而 "$@" 仍然可以用来遍历
- $$ 获得当前进程 ID
- $! 获得之前(上一个)进程 ID
- $? 获得之前(上一个)进程结束的状态码 (0 表示成功, 1 表示失败)
[ 运算符 ]
// cals.sh
a=$[1+2]
b=$[(1+2)*2]
c=$((2+2))
[ 条件判断 ]
- [ 条件语句 ] // 中括号内必须有首尾空格
- [ 23 -eq 22 ] // 运算符两侧必须有空格
- 整数比较
=
-lt
-le
-eq
-gt
-ge
-ne
[ a -eq b ]
-z
-n
==
!=
-r
-w
-x
[ -w file ]
-e
-f
-d
[ -d xxx ]
-a
-o
!
- 使用 [[]] 或 (()) 包裹条件表达式,可以使用 > && 之类的符号
[ 流程控制 ]
[ if ]
if [ 表达式 ]:then
elif [ 表达式 ]:then
fi
if [ 表达式 ]
then
elif [ 表达式 ]
then
fi
[ case ]
case $var in
value1)
;;
value2)
;;
*)
;;
esac
[ for ]
for((i=0; i<4; i++))
do
echo $i
done
[ for in ]
- 这里使用 $* 和 $@ 是一样的
- 这里只能使用 "$@",而不能使用 "$*",因为后者会把所有参数合并到一起
for i in $@
do
echo $i
done
[ while ]
i=0
while [ $i -lt 5 ] // 注意 while 后面要有 空格
do
echo $i
i=$[$i + 1]
done
[ 控制台交互 ]
[ read ]
- read [option] [var_name]
- option:
-p
-t
name=""
echo ""
read -t 2 -p "请输入姓名: " name
if [ "$name" ] // 简写了,空字符串返回 false
then
echo "您的姓名是 $name"
else
echo ""
echo ""
echo " ( 0 ^ 0 ) "
echo " (< >^< >) "
echo ""
echo "您没有输入姓名哦"
echo ""
fi
[ 函数 ]
[ 系统函数 ]
- basename 获取不包含路径的文件名
- dirname 获取不包含文件名的路径
[ 自定义函数 ]
a=0
b=0
function sum()
{
a=$1
b=$2
s=$[$1+$2]
return $s
}
sum 2 3
result=$?
echo "$a + $b 的结果为 $result"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!