Shell的基本语法

1. 脚本开头(Shebang)

#!/bin/bash
指定脚本使用 bash 解释器执行

其他常见选择:#!/bin/sh, #!/usr/bin/env bash

2. 注释

# 这是单行注释

:<<EOF
这是
多行
注释
EOF

3. 变量

定义和使用变量

name="张三"          # 定义变量,等号两边不能有空格
age=20
echo $name          # 使用变量:$变量名
echo ${name}        # 推荐使用大括号

环境变量和局部变量

export PATH=$PATH:/usr/local/bin  # 环境变量(子进程可访问)
local_var="hello"                 # 局部变量(仅当前shell)

4. 字符串

str1="Hello"
str2='World'        # 单引号内不解析变量
str3="${str1}, ${str2}!"  # 字符串拼接

echo "字符串长度: ${#str1}"
echo "子字符串: ${str1:1:3}"  # 从索引1开始取3个字符

5. 数组

# 定义数组
fruits=("apple" "banana" "orange")

# 访问数组
echo ${fruits[0]}     # 第一个元素
echo ${fruits[@]}     # 所有元素
echo ${#fruits[@]}    # 数组长度

6. 输入输出

echo "Hello World"                    # 输出
echo -e "Hello\nWorld"               # 支持转义字符

read -p "请输入姓名: " name           # 输入
echo "你好, $name"

printf "姓名: %s, 年龄: %d\n" "张三" 20  # 格式化输出

7. 条件判断

if 语句

if [ condition ]; then
    # 命令
elif [ condition ]; then
    # 命令
else
    # 命令
fi

常用判断条件

# 文件判断
[ -f file ]     # 文件是否存在
[ -d dir ]      # 目录是否存在
[ -x file ]     # 文件是否可执行

# 字符串比较
[ "$a" = "$b" ]   # 相等
[ "$a" != "$b" ]  # 不相等
[ -z "$str" ]     # 字符串为空
[ -n "$str" ]     # 字符串非空

# 数值比较
[ $a -eq $b ]     # 等于
[ $a -ne $b ]     # 不等于
[ $a -gt $b ]     # 大于
[ $a -lt $b ]     # 小于

8. 循环

for 循环

# 遍历列表
for fruit in apple banana orange; do
    echo "水果: $fruit"
done

# 遍历数组
for i in "${fruits[@]}"; do
    echo "$i"
done

# C风格for循环
for ((i=0; i<10; i++)); do
    echo "数字: $i"
done

while 循环

count=1
while [ $count -le 5 ]; do
    echo "计数: $count"
    ((count++))
done

# 读取文件行
while IFS= read -r line; do
    echo "行内容: $line"
done < file.txt

9. 函数

# 定义函数
function say_hello() {
    local name=$1    # 局部变量
    echo "Hello, $name"
    return 0
}

# 调用函数
say_hello "张三"

# 获取返回值
result=$(say_hello "李四")
echo "函数输出: $result"

10. 特殊变量

echo "脚本名: $0"
echo "参数个数: $#"
echo "所有参数: $@"
echo "第一个参数: $1"
echo "第二个参数: $2"
echo "进程ID: $$"
echo "上条命令退出状态: $?"  # 0表示成功,非0表示失败

11. 命令执行和退出

# 命令执行
result=$(ls -l)          # 将命令结果赋值给变量
echo "结果: $result"

# 退出脚本
exit 0                   # 0表示成功,非0表示错误

12. 错误处理

set -e                    # 遇到错误立即退出
set -u                    # 使用未定义变量时报错
set -o pipefail           # 管道中任意命令失败则整个失败

# 检查命令是否成功
if command; then
    echo "成功"
else
    echo "失败"
fi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值