马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一、Shell 编程核心特性
- 解释型语言
- 无需编译,直接由 bash、sh 等解释器逐行实行。
- 类似 PHP 的解释实行,差别于 C 的编译型。
- 系统命令集成
- 可直接调用 Linux 命令(如 ls、grep、awk),实现系统管理自动化。
- 与 C/PHP 的库函数调用逻辑差别。
- 面向文本处置处罚
- 擅长处置处罚文件、管道(|)、输入输出重定向(>、>>、<)。
- 轻量级脚本
- 适合快速编写小型工具,语法简洁,但复杂逻辑不如 C/PHP 灵活。
二、Shell 底子语法详解
1. 变量
- 定义与赋值(无需声明范例,等号两侧无空格):
- name="Alice" # 字符串
- count=10 # 数值
- files=$(ls) # 命令替换(结果存入变量)
复制代码 - 利用变量($ 符号引用):
- echo $name # 输出变量值
- echo "$name" # 推荐用双引号避免空格问题
- echo "${name}_01" # 明确变量边界
复制代码 - 作用域:默认全局,函数内用 local 声明局部变量。
- 对比:
- PHP:$name = "Alice";,类型自动推导。
- C:需声明类型(char name[] = "Alice";)。
复制代码 2. 输入与输出
- 输出:
- echo "Hello, $name!" # 自动换行
- printf "Count: %d\n" $count # 格式化输出(类似 C 的 printf)
复制代码 - 输入:
- read -p "Enter your name: " name # 读取用户输入到变量
复制代码 - 对比:
- C:scanf("%s", name);
- PHP:$name = fgets(STDIN);
复制代码 3. 条件判定
- 语法:
- if [ $a -eq $b ]; then
- echo "a equals b"
- elif [ $a -gt $b ]; then
- echo "a > b"
- else
- echo "a < b"
- fi
复制代码 - 判定条件:
- 数值比较:-eq(等于)、-ne(不等于)、-gt(大于)。
- 字符串比较:=(相等)、!=(不等)。
- 文件检查:-f(文件存在)、-d(目录存在)。
复制代码 - 对比:
- C/PHP:使用 ==、> 等运算符,条件写在 () 内。
- Shell 的 [ ] 等同于 test 命令,需严格空格。
复制代码 4. 循环
- for 循环:
- for i in {1..5}; do
- echo "Number: $i"
- done
- for file in *.txt; do
- echo "Processing $file"
- done
复制代码 - while 循环:
- count=1
- while [ $count -le 5 ]; do
- echo "Count: $count"
- ((count++)) # 算术运算需用双括号
- done
复制代码 - 对比:
- PHP:for ($i=1; $i<=5; $i++) { ... }
- C:for (int i=1; i<=5; i++) { ... }
复制代码 5. 函数
- 定义与调用:
- function greet() {
- local name=$1 # 局部变量
- echo "Hello, $name!"
- }
- greet "Bob" # 调用函数并传参
复制代码 - 参数通报:
- 通过位置参数 $1、$2 访问,$# 表示参数个数。
- 返回值:通过 return 返回整数状态码(0 表示成功),或 echo 返回字符串。
复制代码 - 对比:
- C/PHP:函数需明确参数列表和类型,返回类型固定。
复制代码 三、Shell 特有功能
1. 特殊变量
- $0:脚本名称。
- $1、$2...:脚本参数。
- $?:上一条命令的退出状态。
- $$:当前进程 PID。
复制代码 2. 通配符与扩展
- *:匹配任意字符。
- ?:匹配单个字符。
- {a,b,c}:生成组合(如 file{1..3}.txt)。
复制代码 3. 管道与重定向
- ls -l | grep ".txt" # 管道传递输出
- echo "Hello" > output.txt # 覆盖写入文件
- echo "World" >> output.txt # 追加写入
复制代码 四、与 C/PHP 的关键差异
特性ShellCPHP实行方式解释实行编译为二进制解释实行(Web 环境)变量范例无需声明,均为字符串需显式声明范例(int, char 等)动态范例(自动推导)语法布局依赖空格和缩进严格利用分号和大括号类似 C,分号和大括号函数返回值返回状态码(0-255)返回任意范例值返回任意范例值调试难度简单(直接运行)需编译后调试(gdb)直接运行,集成错误日志 适用场景系统管理、自动化脚本系统级开辟、高性能应用Web 开辟、后端逻辑 五、快速入门学习建议
- 底子练习:
- 编写脚本输出系统信息(如时间、用户)。
- 利用循环批量重命名文件。
- 调试本领:
- 添加 set -x 在运行时显示具体实行过程。
- 利用 echo 打印变量值。
- 避坑指南:
- 空格敏感:[ $a == $b ] 中的空格必须保留。
- 引号利用:变量含空格时需用双引号包裹(如 "$files")。
- 权限题目:脚本需添加实行权限(chmod +x script.sh)。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|