Shell 核心概念
(1)定义与定位
Shell 是用户与 Linux 操作系统之间的命令行接口,本质是 "对 Linux 命令的逻辑化处理",可接收并执行用户输入的命令,支持批处理,占用资源少、效率高。它与 GUI 并列,是操作系统的重要交互方式,主流版本为 Bash Shell。
(2)学习意义
- 提升工作效率:适用于服务监控、部署、日志分析、数据备份等运维场景,实现自动化操作;
- 求职需求:多数互联网公司后端开发岗位要求掌握 Shell 脚本语言;
- 互补性:与 Python 搭配,Shell 适合简单自动化任务,Python 适合复杂业务逻辑开发。
Shell 入门:Hello World
(1)核心步骤
-
新建脚本文件:
touch helloworld.sh(扩展名.sh仅为标识,不影响执行); -
添加执行权限:
chmod +x helloworld.sh; -
编写脚本:通过
vim编辑文件,首行#!/bin/bash指定 Shell 类型,echo为输出命令;bash
运行
#!/bin/bash echo "helloworld!" # # 开头为注释 -
运行脚本:
./helloworld.sh(需加./表示当前目录,避免系统在 PATH 中查找)。
Shell 变量
(1)变量分类
- 自定义变量:用户自行定义,仅当前 Shell 实例有效,命名规则:字母 / 数字 / 下划线组成,首字符不能为数字,无标点和空格,不使用 Bash 关键字;
- 环境变量:Linux 预定义(如
PATH、HOME、SHELL),用env命令查看,直接通过$变量名使用(如echo $HOME); - Shell 变量:Shell 程序自带的变量,部分为环境变量,部分为局部变量,保障 Shell 正常运行。
(2)变量使用
- 定义:
变量名="值"(如name="SnailClimb"); - 引用:
$变量名(如echo $name)。
Shell 字符串操作
字符串是 Shell 核心数据类型,支持单引号、双引号包裹,操作灵活:
(1)单双引号区别
- 单引号:特殊符号(如
$、反引号)无特殊含义,原样输出; - 双引号:支持
$(变量引用)、反引号(命令执行)、\(转义),其他符号原样输出。
(2)常用操作
- 拼接:双引号中直接拼接(
"hello, $name"),单引号需拼接变量('hello, '$name''); - 长度:
${#字符串}(如echo ${#name})或expr length "$字符串"; - 截取:
${字符串:起始索引:长度}(如(${str:0:10}截取前 10 字符),或通过#/##/%/%%按匹配规则截取(如${var##*/}截取路径中文件名)。
Shell 数组
Bash 仅支持一维数组,无大小限制:
- 创建:
数组名=(元素1 元素2 ...)(如array=(1 2 3 4 5)); - 长度:
${#数组名[@]}或${#数组名[*]}; - 访问:
${数组名[索引]}(索引从 0 开始,如echo ${array[2]}); - 操作:
unset 数组名[索引]删除指定元素,unset 数组名删除整个数组; - 遍历:
for i in ${数组名[@]}; do echo $i; done。
Shell 基本运算符
Shell 支持 6 类运算符,需通过特定格式使用:
(1)算术运算符
- 常用:
+(加)、-(减)、*(乘,需转义\*)、/(除)、%(取余); - 用法:通过
expr命令(如val=expr a + ),或((表达式))`(如 `((a*b))`)。
(2)关系运算符(仅支持数字)
- 常用:
-eq(等于)、-ne(不等于)、-gt(大于)、-lt(小于)、-ge(大于等于)、-le(小于等于); - 用法:
if [ $a -eq $b ]; then ... fi。
(3)其他运算符
- 逻辑运算符:
&&(与)、||(或),需用[[ ]]包裹(如[[ $a -lt 100 && $b -gt 50 ]]); - 字符串运算符:
=(相等)、!=(不等)、-z(长度为 0)、-n(长度非 0); - 文件运算符:
-f(普通文件)、-d(目录)、-r(可读)、-w(可写)、-x(可执行)、-e(存在)(如if [ -f $file ]; then ... fi)。
Shell 流程控制
(1)if-elif-else 条件语句
bash
运行
if [ 条件1 ]; then
执行语句1
elif [ 条件2 ]; then
执行语句2
else
执行语句3
fi
- 注意:条件表达式需用
[ ]包裹,运算符与变量间需空格。
(2)for 循环语句
- 列表循环:
for 变量 in 列表; do 执行语句; done(如for loop in 1 2 3; do echo $loop; done); - 数值循环:
for((i=1; i<=5; i++)); do 执行语句; done。
(3)while 循环语句
- 基本循环:
while(( 条件 )); do 执行语句; done(如while(( $int<=5 )); do echo $int; let "int++"; done); - 无限循环:
while true; do 执行语句; done; - 读取键盘:
while read 变量; do 执行语句; done(需按CTRL-D退出)。
Shell 函数
(1)无参数无返回值函数
bash
运行
函数名(){
执行语句
}
# 调用
函数名
(2)有返回值函数
返回值通过 return 指定(仅支持数字),通过 $? 获取:
bash
运行
funWithReturn(){
return $((a+b))
}
funWithReturn
echo "结果:$?"
(3)带参数函数
- 参数获取:
$1-$n(第 1 到第 n 个参数)、$#(参数个数)、$*(所有参数拼接为字符串); - 示例:
bash
运行
funWithParam(){
echo "第一个参数:$1"
echo "参数总数:$#"
}
funWithParam 1 2 3 # 调用时传入参数