
核心概念
1. 基础结构
Shell脚本以#!/bin/bash开头,指定解释器 。使用变量存储数据,格式如var=value,引用时加$符号 。
特殊变量
#a.sh#!/bin/bashecho $1echo $2echo $3echo $0echo $#echo $@echo $*echo $?echo $$echo "finally"



a=(2 5 7 10)echo ${a[2]} #输出下标为 2 的数据echo ${#a[*]} #输出数组的长度echo ${a[@]:2} #截取下标从 2 到最后echo ${a[@]:1:2} #截取从下标 1 后面 2 个
2. 输入输出
输入:用read命令获取用户输入,例如read var 。
输出:用echo或printf显示信息,如echo "Hello, $name"。
重定向符

管道 ‘ | ’
管道操作符|用于连接左右两个命令,将|左边的命令执行结果(输出)作为|右边命令的输入。
单双引号' '和" "的区别:
单引号:消除所有字符的特殊意义。
双引号:消除除了$、" " 、’ ’ 三种以外其它字符的特殊意义。
a=10echo ${a} #输出:10echo "${a}" #输出:10echo '${a}' #输出:${a}
3. 条件判断
if语句:执行条件判断,将if和then放在不同行,如同行放置,则 if 语句必须要;结束
例如:
if [ "$num" -gt 10 ]; thenecho "Number is greater than 10"fi
case "$choice" instart) echo "Starting..." ;;stop) echo "Stopping..." ;;*) echo "Invalid option" ;;esac
4.循环控制
for循环:遍历列表,例如:
for i in {1..5}; doecho $idone
while [ $count -lt 10 ]; doecho $count((count++))done
#!/bin/bashmyvar=0until [ $myvar -eq 10 ]do echo $myvarmyvar=$(($myvar+1))done
函数用于封装可重用代码块,例如:
greet() {echo "Hello, $1!"}greet "World"
# 设置变量set user "HwHiAiUser"set host "192.168.21.8"set password "Mind@123"#使用 spawn 启动 scp 命令,将文件 test 传输到远程主机的用户主目录。spawn scp test$user@$host:~# 处理密码提示expect {"password:" {send "$password\r"}"yes/no" {send "yes\r"expect "password:" {send "$password\r"}}}# 等待 scp 进程结束expect eof
1. 编写规范
Shebang(释伴)是Unix/Linux系统中用于指定脚本解释器的特殊符号行,以#!开头,后跟解释器路径,如:#!/bin/bash
注释:详细说明功能、参数及关键步骤 。
错误处理:检查命令返回值并提供有意义的错误提示 。
2. 可读性与维护性
使用小写字母和下划线命名变量,避免大写字母 。
添加注释和文档,便于他人理解 。
将逻辑拆分为模块化函数 。
3. 性能优化
避免不必要的子进程创建,例如使用变量替换 。
利用内置命令减少外部调用 。
通过掌握这些基础语法和遵循最佳实践,你可以高效地编写出简洁、易维护且功能强大的Shell脚本。
Shell的终极哲学
-自动化一切:能写脚本的绝不手动操作。
-组合技为王:管道、重定向、工具链叠加使用。
-持续学习:每天掌握一个命令,一年后你就是终端之神!
文章转载自老柴杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




