当前位置: 首页 > wzjs >正文

做原型网站秦皇岛咔咔科技有限公司

做原型网站,秦皇岛咔咔科技有限公司,搜外网友情链接,怎么样才可以在百度上打广告Shell 脚本编程详细指南:第三章 - 运算符与条件判断完全指南 引言:掌握Shell逻辑控制的核心 条件判断是Shell脚本实现复杂逻辑的基石。本章将深入解析各种运算符和条件判断结构,帮助您编写更健壮、更高效的脚本。我们将从基础语法入手&…

Shell 脚本编程详细指南:第三章 - 运算符与条件判断完全指南

引言:掌握Shell逻辑控制的核心

条件判断是Shell脚本实现复杂逻辑的基石。本章将深入解析各种运算符和条件判断结构,帮助您编写更健壮、更高效的脚本。我们将从基础语法入手,逐步探讨高级用法和最佳实践。

1. 数值运算的全面解析

1.1 五种数值计算方法对比

方法示例优点缺点
$(( ))echo $((a * b))高效,语法简洁 ,最常用Bash特有
exprexpr $a + $bPOSIX兼容性能差,需要转义特殊字符
letlet sum=a+b可直接修改变量可读性较差
bcecho "5.2+3.8" | bc支持浮点数运算需要外部命令
awkawk "BEGIN{print $a/$b}"高精度计算语法复杂

1.2 实际运算示例

整数运算:

a=15 b=4
echo "加法: $((a + b))"        # 19
echo "取模: $((a % b))"       # 3
echo "幂运算: $((a ** 2))"    # 225

浮点运算(使用bc):

pi=$(echo "scale=10; 4*a(1)" | bc -l)  # 计算π值
echo "圆周率: $pi"  # 3.1415926535

位运算:

flags=5
echo "二进制: $((flags>>1))"  # 2 (0101 → 0010)

2. 比较运算符深度剖析

2.1 数值比较运算符表

运算符含义等价数学符号
-eq等于==
-ne不等于!=
-gt大于>
-ge大于等于>=
-lt小于<
-le小于等于<=

2.2 字符串比较运算符表

运算符含义示例
=相等[ "$str" = "test" ]
!=不相等[[ "$str" != "" ]]
< >ASCII比较(需在[[ ]]中使用)[[ "a" < "b" ]]
=~正则匹配(Bash扩展)[[ "$str" =~ ^[0-9]+$ ]]
-z空字符串[ -z "$var" ]
-n非空字符串[ -n "$var" ]

2.3 文件测试运算符

[ -e file ]    # 存在
[ -f file ]    # 是普通文件
[ -d file ]    # 是目录
[ -r file ]    # 可读
[ -w file ]    # 可写
[ -x file ]    # 可执行
[ -s file ]    # 大小>0
[ file1 -nt file2 ]  # file1比file2新

3. 条件判断结构详解

3.1 if语句的四种形式

基本形式:

if [ condition ]; thencommands
fi

if-else:

if [[ $num -gt 10 ]]; thenecho "大于10"
elseecho "小于等于10"
fi

if-elif-else:

if [ "$score" -ge 90 ]; thengrade="A"
elif [ "$score" -ge 80 ]; thengrade="B"
elsegrade="C"
fi

嵌套if:

if [ -f "$file" ]; thenif [ -s "$file" ]; thenecho "文件存在且非空"fi
fi

3.2 条件连接运算符

运算符含义示例
&&逻辑与[ $a -gt 0 ] && [ $a -lt 10 ]
||逻辑或`[ -z “$str” ]
!逻辑非if ! [ -d "$dir" ]; then

4. 测试表达式进阶技巧

4.1 [ ] vs [[ ]] 对比

特性[ ] (test)[[ ]] (Bash扩展)
字符串比较支持支持(更安全)
模式匹配不支持支持(=~)
逻辑运算-a/-o&&/||
单词分割会发生不会发生
文件通配会展开不会展开

推荐实践:

# 使用[[ ]]避免变量引用问题
if [[ "$filename" == *.log ]]; thenecho "日志文件"
fi

4.2 正则表达式匹配

read -p "输入邮箱地址: " email
if [[ "$email" =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ]]; thenecho "有效邮箱"
elseecho "无效邮箱格式"
fi

5. 实战案例与解决方案

案例1:计算器脚本

#!/bin/bash
# calculator.shif [[ $# -ne 3 ]]; thenecho "用法: $0 数字 运算符 数字"echo "示例: $0 5 + 3"exit 1
ficase $2 in+) result=$(($1 + $3)) ;;-) result=$(($1 - $3)) ;;*) result=$(($1 * $3)) ;;/) [[ $3 -eq 0 ]] && { echo "错误: 除数不能为0"; exit 1; }result=$(echo "scale=2; $1 / $3" | bc) ;;%) result=$(($1 % $3)) ;;^) result=$(($1 ** $3)) ;;*) echo "不支持的操作符: $2"; exit 1 ;;
esacecho "结果: $result"

案例2:文件备份脚本

#!/bin/bash
# backup.shread -p "输入要备份的文件路径: " filepathif [[ ! -e "$filepath" ]]; thenecho "错误: 文件不存在" >&2exit 1
elif [[ ! -r "$filepath" ]]; thenecho "错误: 文件不可读" >&2exit 1
fibackup_dir="${HOME}/backups"
mkdir -p "$backup_dir"timestamp=$(date +%Y%m%d_%H%M%S)
filename=$(basename "$filepath")
backup_file="${backup_dir}/${filename}.${timestamp}.bak"if cp "$filepath" "$backup_file"; thenecho "备份成功: $backup_file"
elseecho "备份失败" >&2exit 1
fi

6. 最佳实践与常见陷阱

6.1 必须遵循的规范

  1. 变量引用:

    # 正确
    if [ "$var" -gt 0 ]; then# 危险
    if [ $var -gt 0 ]; then
    
  2. 字符串比较:

    # 使用双中括号避免分词
    if [[ "$str" == "value" ]]; then
    
  3. 数值比较:

    # 使用双括号进行算术比较
    if ((num > max)); then
    

6.2 常见错误排查

问题1:未引用的变量导致语法错误

# 错误
if [ $var = "test" ]; then  # 当$var为空时变成 [ = "test" ]# 正确
if [ "$var" = "test" ]; then

问题2:使用错误的比较运算符

# 错误:在[ ]中使用>进行字符串比较
if [ "$str1" > "$str2" ]; then# 正确
if [[ "$str1" > "$str2" ]]; then

进阶技巧

多条件测试优化

# 传统方式(创建子进程)
if [ "$a" -gt 0 ] && [ "$a" -lt 10 ]; then# 高效方式(Bash内置)
if [[ "$a" -gt 0 && "$a" -lt 10 ]]; then

使用算术表达式

# 在条件中直接计算
if (( (a + b) > (c * 2) )); thenecho "条件满足"
fi

本章总结

本章深入探讨了Shell脚本中的运算符和条件判断,重点包括:

  • 五种数值运算方法的对比与选择
  • 全面的比较运算符参考表
  • 条件判断结构的各种形式与应用场景
  • [ ]与[[ ]]的深度对比与选择建议
  • 实际案例分析和最佳实践

🔍 下章预告:第四章将深入讲解循环结构(for/while/until)和流程控制(case/select),带您掌握Shell脚本的自动化处理能力。

互动练习:
编写一个脚本,实现以下功能:

  1. 检查/tmp目录是否存在
  2. 如果存在,统计其中的文件数量
  3. 根据文件数量输出不同消息:
    • 空目录:0-5个文件
    • 正常:6-20个文件
    • 过多:20+个文件

欢迎在评论区分享您的实现方案!


文章转载自:

http://ImBifDFy.jfbbq.cn
http://FuHIVPMp.jfbbq.cn
http://fdnwJHmw.jfbbq.cn
http://AWTNyc42.jfbbq.cn
http://qhIP6L97.jfbbq.cn
http://30ZTw3JC.jfbbq.cn
http://KOeiO7Zy.jfbbq.cn
http://wfgAQyAw.jfbbq.cn
http://ZU0AhAl5.jfbbq.cn
http://G7AQq5SV.jfbbq.cn
http://KJEOCn0w.jfbbq.cn
http://mAF1L4Pe.jfbbq.cn
http://kvQolPnc.jfbbq.cn
http://tcfPHIAP.jfbbq.cn
http://5VEFSTHX.jfbbq.cn
http://AHFX7ZGc.jfbbq.cn
http://R5KAhYWa.jfbbq.cn
http://bvgu5idf.jfbbq.cn
http://Bool9H2m.jfbbq.cn
http://T9kSj0Ks.jfbbq.cn
http://ylduYGuU.jfbbq.cn
http://il8kfBrK.jfbbq.cn
http://zxA6HUUM.jfbbq.cn
http://qHWdHQux.jfbbq.cn
http://WVasnBgO.jfbbq.cn
http://tUoNkEhj.jfbbq.cn
http://RdSfeeKp.jfbbq.cn
http://9stmuuVS.jfbbq.cn
http://gf7ItyEP.jfbbq.cn
http://BKzVInEh.jfbbq.cn
http://www.dtcms.com/wzjs/683316.html

相关文章:

  • 需要做网站建设的行业有哪些单页建站系统
  • 做暧昧视频网站怎样找家做网站的公司
  • 做资源的教育类网站或公司沈阳京科医院男科
  • 湖南岳阳网站建设公司黄页顺企网如何做产品网站
  • 湖北建设网站首页wordpress yasaer
  • 帝国cms如何做网站学习软件开发的网站
  • 什么网站有做册子版附近广告公司喷绘刻字
  • 免费域名模板建站分割页面
  • 网站建设实验目的南昌企业建站程序
  • 网站设计的图片邯郸网站建设咨询安联网络
  • 巴彦淖尔网站制作中国职业培训在线官方网站
  • 深圳都信建设监理有限公司网站濮阳 网站建设
  • 响应式网站开发费用如何用python开发网页
  • 做淘客网站注意事项如何做旅游休闲网站
  • 苏州高新区建设局网站外贸网站如何做
  • 网站上的图用美图秀秀做可以吗织梦教育网站模板
  • 花生壳怎么发布自己做的网站2020十大热点事件
  • 网站开发 简单备案网站建设承诺书
  • 网站建设价格报价wordpress采集淘宝
  • 阿里云可以放几个网站建网站的流程和费用
  • 如今流行的网站建设软件界面设计方案
  • 网站前台代码综合性门户网站是什么意思
  • 泰州网站设计培训网站设计建设定制
  • 个人可以备案企业网站吗深圳做网站哪家公司最好
  • 儿童网站模板免费下载网站的积分系统怎么做的
  • 做动态图片的网站吗wordpress情侣模板
  • 长春建设工程管理中心网站室内装修设计师工资一般多少钱
  • 网页模版网站大连网络设计有限公司
  • 网站开发好就业吗做一个购物商城网站多少钱
  • 网站推广具体内容简要说明乐达淄博网站建设制作