Shell Scripting Fundamentals 是一份面向 Bash/shell 脚本编写的核心模式与最佳实践指南,适用于编写或修改 Bash/shell 脚本的场景。以下按用途、主要能力、使用方式、适用场景和限制分段介绍。
一、用途 该技能用于在编写或修改 Bash/shell 脚本时提供规范指导,帮助开发者写出健壮、可维护的 shell 脚本。
二、主要能力
- 脚本结构:建议始终以正确的 shebang 和安全选项开头,示例为 #!/usr/bin/env bash 与 set -euo pipefail。安全选项含义:set -e 表示任一命令失败即退出;set -u 表示使用未定义变量时报错;set -o pipefail 表示管道中任一命令失败则整个管道失败。
- 变量:讲解声明与赋值(等号两侧不加空格,如 name="value";readonly 定义常量,如 readonly CONFIG_DIR="/etc/myapp";函数内使用 local,如 local result="computed")。强调始终引用变量以防止分词和通配符展开,给出正例 echo "$variable"、cp "$source" "$destination" 与反例 echo $variable、cp $source $destination。默认值语法包括:${NAME:-default}(未设置时使用默认值)、${NAME:-}(未设置或为空时使用默认值)、: "${NAME:=default}"(未设置时赋值默认值)、: "${REQUIRED_VAR:?Error: REQUIRED_VAR must be set}"(未设置时报错)。
- 条件判断:推荐现代语法 [[ ]],示例包括文件测试 if [[ -f "$file" ]]; then echo "File exists"; fi、字符串比较 if [[ "$string" == "value" ]]、数值比较 if (( count > 10 ))、正则匹配 if [[ "$input" =~ ^[0-9]+$ ]]。常用测试运算符:-f(文件存在且为普通文件)、-d(目录存在)、-e(路径存在)、-r(可读)、-w(可写)、-x(可执行)、-z(字符串为空)、-n(字符串非空)。
- 循环:for 循环可遍历列表(for item in one two three; do echo "$item"; done)、遍历文件(使用 glob 而非 ls,for file in *.txt; do [[ -e "$file" ]] || continue; process "$file"; done)、C 风格 for 循环(for (( i = 0; i < 10; i++ )))。while 循环可从文件读取行(while IFS= read -r line; do echo "$line"; done < "$filename")或使用进程替换(done < <(some_command))。
- 数组:声明 declare -a files=(),添加元素 files+=("file1.txt"),遍历 for file in "${files[@]}",获取长度 ${#files[@]},按索引访问 ${files[0]}。
- 命令替换:推荐现代语法 result=$(command),支持嵌套 result=$(echo $(date)),避免使用旧式反引号 result=
command。 - 函数:定义 process_file(),使用 local file="$1"、local output_dir="${2:-./output}",检查文件存在并输出错误到 stderr(echo "Error: File not found: $file" >&2; return 1),调用 process_file "input.txt" "/tmp/output"。
三、使用方式 该技能以文档形式提供模式与示例,供编写或修改 Bash/shell 脚本时参考。具体安装或调用方式暂未提供。
四、适用场景 适用于编写或修改 Bash/shell 脚本的场景,包括脚本结构设计、变量处理、条件判断、循环、数组、命令替换和函数编写。
五、限制 资料未提供该技能的安装方式、运行环境要求、平台限制、收费信息或效果说明,暂未提供。