Linux脚本以Shebang(#!/bin/bash
)开头,指定解释器;变量无需声明类型,赋值时等号两侧无空格(如MY_VAR="value"
);引用变量需用$
(如echo $MY_VAR
)。命令输出可通过管道(|
)连接(如ls -l | grep ".sh$"
),实现数据流转。
PATH
)和局部变量(小写,如my_var
)。BACKUP_DIR
而非bd
),避免缩写歧义。${VAR}
格式可明确变量边界(如${MY_VAR}_suffix
),防止歧义。使用if
语句实现分支逻辑,格式为:
if [ condition ]; then # 条件成立时执行 elif [ condition ]; then # 其他条件成立时执行 else # 所有条件均不成立时执行 fi
常用条件判断:
[ -f "/path/to/file" ]
[ "$str1" = "$str2" ]
[ "$num1" -gt "$num2" ]
(大于)for file in $(ls); do echo "$file" done
count=1 while [ $count -le 5 ]; do echo "Count: $count" ((count++)) done
将重复代码块封装为函数,提高复用性:
backup() { local SOURCE=$1 local DEST=$2 rsync -av "$SOURCE" "$DEST" echo "Backup completed from $SOURCE to $DEST" } # 调用函数 backup "/path/to/source" "/path/to/dest"
$?
存储上一条命令的退出状态(0表示成功,非0表示失败)。command_to_execute if [ $? -ne 0 ]; then echo "Error: Command failed" exit 1 fi
set -e
:脚本遇到错误时立即退出,避免继续执行导致更严重问题。trap
命令:捕获信号(如SIGINT
、SIGTERM
),执行清理操作(如删除临时文件)。trap 'echo "Script interrupted. Cleaning up..."; rm -f /tmp/temp_file; exit 1' SIGINT SIGTERM
echo "$(date): Error occurred" >> /var/log/script_error.log
set -x
:打印执行的每一行命令及参数,跟踪脚本流程。set -x # 脚本内容 set +x
bash -x
:直接调试脚本(如bash -x my_script.sh
)。$(<file)
读取文件内容,而非cat file
)。ls | grep "pattern"
,而非ls > temp && grep "pattern" temp
)。files=("file1" "file2" "file3") for file in "${files[@]}"; do echo "$file" done
${str//old/new}
)替代sed
,提升效率。使用FetchLinux自动化安装、更新软件包,减少手动操作:
#!/bin/bash # 更新所有软件包 sudo fetchlinux update # 安装必要软件包(git、vim、curl) sudo fetchlinux install git vim curl # 清理缓存 sudo fetchlinux clean
赋予执行权限(chmod +x update_system.sh
),可通过Cron定时执行(如每天凌晨2点)。
结合FetchLinux的rsync
功能,实现增量备份:
#!/bin/bash SOURCE_DIR="/path/to/source" BACKUP_DIR="/backup/data" # 创建备份目录 mkdir -p "$BACKUP_DIR" # 增量备份(保留删除文件) rsync -av --delete "$SOURCE_DIR" "$BACKUP_DIR/$(date +%Y%m%d)_backup" # 记录日志 echo "Backup completed at $(date)" >> /var/log/fetchlinux-backup.log
通过Cron设置每天凌晨1点执行,确保数据安全。
使用FetchLinux实现本地与远程服务器的文件同步:
#!/bin/bash REMOTE_USER="user" REMOTE_HOST="remote.example.com" REMOTE_DIR="/remote/path" LOCAL_DIR="/local/path" # 上传本地文件夹到远程 fetchlinux upload "$LOCAL_DIR" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR" # 下载远程文件夹到本地 fetchlinux download "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR" "$LOCAL_DIR"
结合Cron定时执行(如每天凌晨3点),实现数据定期同步。
bash -n my_script.sh
检查脚本语法是否正确。bash -x my_script.sh
模拟执行,查看命令流程。chmod +x my_script.sh
。crontab -e
添加0 2 * * * /path/to/my_script.sh
)。tail -f /var/log/script.log
),确保任务正常运行。