一、Shell编程基础符号解析
1. 信息传递:重定向与管道符
# 覆盖式重定向 echo "New Content" > file.txt # 追加式重定向 echo "Additional Content" >> file.txt # 管道符应用 env | grep PATH
2. 终端控制:后台执行与信息符号
# 后台执行命令 sleep 10 & # 标准输出和错误输出分离 /bin/bash script.sh 1>> success.log 2>> error.log # 合并所有输出 /bin/bash script.sh >> all.log 2>&1
二、输入格式化技巧
1. EOF原理与应用
# 多行内容输入 cat > config.conf << EOF server { listen 80; server_name example.com; } EOF # 使用<<-忽略前导制表符 cat <<- END Indented text END
2. 文本输入工具:cat与tee
# cat创建配置文件 cat > nginx.conf << EOF location / { proxy_pass http://backend; } EOF # tee同时输出到屏幕和文件 echo "Important Message" | tee message.log
三、输出格式化艺术
1. echo命令高级用法
# 转义字符应用 echo -e "Line1\nLine2\tTabbed" # 不换行输出 echo -n "Processing..."; echo "Done"
2. 终端颜色控制
# 颜色代码格式 echo -e "\033[背景色;文字颜色m文本\033[0m" # 实际应用示例 echo -e "\033[41;37m 红底白字 \033[0m" echo -e "\033[32m 绿色文字 \033[0m"
3. printf格式化输出
# 基本格式化 printf "Name: %-10s Age: %03d\n" "Alice" 25 # 表格样式输出 printf "%-15s | %-10s | %s\n" "Host" "Status" "Response" printf "%-15s | %-10s | %dms\n" "server1" "OK" 23
四、脚本交互技术
1. read命令深度解析
# 基本输入 read -p "Enter username: " username # 密码隐藏输入 read -s -p "Enter password: " password # 超时控制 read -t 10 -p "Quick response: " answer
2. 实战案例:登录系统
#!/bin/bash clear echo "---------------------------------" read -p "请输入用户名: " account read -s -p "请输入密码: " password echo echo "---------------------------------" printf "用户名: \e[31m%s\e[0m 密码: \e[31m%s\e[0m\n" $account $password
五、运算符与计算
1. 基础运算符
# 四则运算 num=$((10 + 5 * 2)) # 结果为20 # 自增运算 count=1 ((count++)) # 结果为2
2. 高级赋值运算
# 复合赋值 value=10 let "value *= 2" # 结果为20 # 三元运算 result=$(( $a > $b ? $a : $b ))
3. expr多功能计算
# 数学计算 expr 10 + 5 # 结果为15 # 字符串操作 filename="config.txt" expr length "$filename" # 获取长度 expr substr "$filename" 1 6 # 截取子串
六、综合案例:Java环境部署脚本
#!/bin/bash JAVA_SOFT='jdk-8u121-linux-x64.tar.gz' SERVER_HOME='/data/server' SOFTS_HOME='/data/softs' # 解压安装 tar xf $SOFTS_HOME/$JAVA_SOFT -C $SERVER_HOME ln -s $SERVER_HOME/jdk1.8.0_121 $SERVER_HOME/java # 环境变量配置 cat > /etc/profile.d/java.sh << EOF export JAVA_HOME=$SERVER_HOME/java export PATH=\$JAVA_HOME/bin:\$PATH EOF # 验证安装 source /etc/profile.d/java.sh java_version=$(java -version 2>&1 | awk -F '"' '/version/{print $2}') # 彩色输出 echo -e "\e[32mJava安装成功! 版本: \e[33m$java_version\e[0m"
七、Shell编程最佳实践
-
代码可读性
-
使用有意义的变量名
-
添加必要的注释
-
保持一致的缩进风格
-
-
错误处理
# 遇到错误立即退出 set -e # 使用未定义变量时报错 set -u
-
性能优化
-
减少子Shell创建
-
避免不必要的管道操作
-
使用内置命令替代外部命令
-