shell-scripting
11
总安装量
11
周安装量
#27354
全站排名
安装命令
npx skills add https://github.com/chaterm/terminal-skills --skill shell-scripting
Agent 安装分布
claude-code
9
opencode
9
github-copilot
8
codex
8
gemini-cli
8
cursor
7
Skill 文档
Shell èæ¬ç¼å
æ¦è¿°
Bash èæ¬ç¼åãè°è¯ãæä½³å®è·µçæè½ã
åºç¡è¯æ³
èæ¬ç»æ
#!/bin/bash
# èæ¬æè¿°
# Author: name
# Date: 2024-01-01
set -euo pipefail # ä¸¥æ ¼æ¨¡å¼
# åéå®ä¹
VAR="value"
readonly CONST="constant"
# 主é»è¾
main() {
echo "Hello, World!"
}
main "$@"
åé
# å®ä¹åé
name="value"
name='literal value' # ä¸è§£æåé
# 使ç¨åé
echo $name
echo ${name}
echo "${name}_suffix"
# é»è®¤å¼
${var:-default} # æªè®¾ç½®æ¶ä½¿ç¨é»è®¤å¼
${var:=default} # æªè®¾ç½®æ¶èµå¼å¹¶ä½¿ç¨
${var:+value} # 已设置æ¶ä½¿ç¨ value
${var:?error message} # æªè®¾ç½®æ¶æ¥é
# å符串æä½
${#var} # é¿åº¦
${var:0:5} # å串
${var#pattern} # å é¤åç¼
${var%pattern} # å é¤åç¼
${var/old/new} # æ¿æ¢
æ°ç»
# å®ä¹æ°ç»
arr=(a b c d)
arr[0]="first"
# è®¿é®æ°ç»
${arr[0]} # 第ä¸ä¸ªå
ç´
${arr[@]} # ææå
ç´
${#arr[@]} # æ°ç»é¿åº¦
${!arr[@]} # ææç´¢å¼
# éåæ°ç»
for item in "${arr[@]}"; do
echo "$item"
done
æµç¨æ§å¶
æ¡ä»¶å¤æ
# if è¯å¥
if [[ condition ]]; then
commands
elif [[ condition ]]; then
commands
else
commands
fi
# æ¡ä»¶è¡¨è¾¾å¼
[[ -f file ]] # æä»¶åå¨
[[ -d dir ]] # ç®å½åå¨
[[ -z "$var" ]] # åé为空
[[ -n "$var" ]] # åéé空
[[ "$a" == "$b" ]] # å符串ç¸ç
[[ "$a" != "$b" ]] # å符串ä¸ç
[[ $a -eq $b ]] # æ°åç¸ç
[[ $a -lt $b ]] # å°äº
[[ $a -gt $b ]] # 大äº
# é»è¾è¿ç®
[[ cond1 && cond2 ]] # ä¸
[[ cond1 || cond2 ]] # æ
[[ ! cond ]] # é
循ç¯
# for 循ç¯
for i in 1 2 3 4 5; do
echo $i
done
for i in {1..10}; do
echo $i
done
for ((i=0; i<10; i++)); do
echo $i
done
for file in *.txt; do
echo "$file"
done
# while 循ç¯
while [[ condition ]]; do
commands
done
# 读åæä»¶
while IFS= read -r line; do
echo "$line"
done < file.txt
# until 循ç¯
until [[ condition ]]; do
commands
done
case è¯å¥
case "$var" in
pattern1)
commands
;;
pattern2|pattern3)
commands
;;
*)
default commands
;;
esac
彿°
å®ä¹å½æ°
# æ¹å¼1
function_name() {
local var="local variable"
echo "Arguments: $@"
echo "First arg: $1"
echo "Arg count: $#"
return 0
}
# æ¹å¼2
function function_name {
commands
}
# è°ç¨å½æ°
function_name arg1 arg2
# è·åè¿åå¼
result=$(function_name)
常ç¨å½æ°æ¨¡æ¿
# æ¥å¿å½æ°
log() {
local level=$1
shift
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$level] $*"
}
log INFO "This is info message"
log ERROR "This is error message"
# é误å¤ç
die() {
echo "ERROR: $*" >&2
exit 1
}
# ç¡®è®¤å½æ°
confirm() {
read -p "$1 [y/N] " response
[[ "$response" =~ ^[Yy]$ ]]
}
if confirm "Continue?"; then
echo "Proceeding..."
fi
è¾å ¥è¾åº
读åè¾å ¥
# 读åç¨æ·è¾å
¥
read -p "Enter name: " name
read -sp "Enter password: " password # éèè¾å
¥
read -t 10 -p "Quick! " answer # è¶
æ¶
# 读åæä»¶
while IFS= read -r line; do
echo "$line"
done < file.txt
éå®å
# è¾åºéå®å
command > file # è¦ç
command >> file # 追å
command 2> error.log # é误è¾åº
command > file 2>&1 # åå¹¶è¾åº
command &> file # åä¸
# è¾å
¥éå®å
command < file
# Here Document
cat << EOF
å¤è¡ææ¬
åé: $var
EOF
cat << 'EOF' # ä¸è§£æåé
åå§ææ¬
EOF
è°è¯æå·§
è°è¯é项
# å¯ç¨è°è¯
set -x # æå°æ§è¡çå½ä»¤
set -v # æå°è¯»åçè¡
set -e # åºéå³éåº
set -u # æªå®ä¹å鿥é
set -o pipefail # 管ééè¯¯ä¼ é
# ç»å使ç¨
set -euxo pipefail
# è°è¯ç¹å®é¨å
set -x
# è°è¯ä»£ç
set +x
è°è¯å·¥å ·
# è¯æ³æ£æ¥
bash -n script.sh
# è°è¯è¿è¡
bash -x script.sh
# shellcheck éæåæ
shellcheck script.sh
æä½³å®è·µ
èæ¬æ¨¡æ¿
#!/bin/bash
#
# Script: script_name.sh
# Description: Brief description
# Author: Your Name
# Date: 2024-01-01
#
set -euo pipefail
# Constants
readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
readonly SCRIPT_NAME="$(basename "$0")"
# Logging
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"; }
error() { echo "[ERROR] $*" >&2; }
die() { error "$*"; exit 1; }
# Usage
usage() {
cat << EOF
Usage: $SCRIPT_NAME [options] <arguments>
Options:
-h, --help Show this help message
-v, --verbose Enable verbose mode
Examples:
$SCRIPT_NAME -v input.txt
EOF
}
# Parse arguments
parse_args() {
while [[ $# -gt 0 ]]; do
case $1 in
-h|--help)
usage
exit 0
;;
-v|--verbose)
VERBOSE=true
shift
;;
*)
ARGS+=("$1")
shift
;;
esac
done
}
# Main
main() {
parse_args "$@"
# Your logic here
log "Starting $SCRIPT_NAME"
}
main "$@"
æ éææ¥
| é®é¢ | è§£å³æ¹æ³ |
|---|---|
| è¯æ³é误 | bash -n script.sh æ£æ¥ |
| åéæªå®ä¹ | ä½¿ç¨ set -u æ ${var:-} |
| ç©ºæ ¼é®é¢ | åéå å¼å· "$var" |
| 管ééè¯¯è¢«å¿½ç¥ | ä½¿ç¨ set -o pipefail |
| è°è¯å°é¾ | ä½¿ç¨ set -x æ shellcheck |