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

Linux Shell 实验一:数据采集与脚本调试错误总结

一、实验简介

本次实验主要围绕 Linux 环境下的 Shell 脚本编写与数据采集操作,包括变量定义、循环控制、条件判断、目录操作、用户输入处理等内容。实验过程中出现了多种典型错误,本文将逐一分析并总结相关知识点。

二、错误与问题汇总

1. 变量赋值语法错误

a = "hello word"

错误信息a:未找到命令
原因:Shell 中变量赋值不能有空格,应写为:

a="hello world"

2. 循环中变量递增语法错误

let"i=i+1"

错误信息leti=i+1:未找到命令
正确写法

let "i=i+1"
# 或
i=$((i + 1))

3. 目录创建权限不足

mkdir -m 754 /home/userdata

错误信息权限不够
解决方法:使用 sudo 提权:

sudo mkdir -m 754 /home/userdata

4. 目录已存在导致重复创建

mkdir: 无法创建目录"/home/userdata/user1": 文件已存在

解决方法:在创建前判断目录是否存在:

if [ ! -d "$temp$i" ]; thenmkdir -m 754 "$temp$i"
fi

5. 算术运算符号错误

let "i=i+1"#

错误信息无效的算术进制 (错误符号是 "1#")
原因# 是注释符号,不能出现在 let 表达式中。

6. 条件判断中括号空格问题

while[ $num -gt 0 ]

错误信息未找到命令
正确写法

while [ $num -gt 0 ]

注意[ 是命令,后面必须有空格。

7. 表达式中的转义问题

myAnswer=$(expr $number1 \* $number2)

注意* 在 Shell 中是通配符,需转义为 \*

8. 除零错误处理

if [ $number2 -eq 0 ]; thenecho "0 cannot be the divisor"continue
fi

说明:在除法运算前必须判断除数是否为0。

三、Shell 脚本知识点总结

1. 变量定义与使用

  • 赋值:变量名=值(无空格)
  • 使用:$变量名

2. 条件判断

  • 格式:[ 条件 ],注意括号与内容之间的空格
  • 常用判断:
    • -eq:等于
    • -gt:大于
    • -d:判断目录是否存在

3. 循环结构

  • for 循环:
    for((i=1; i<=8; i++))
    
  • while 循环:
    while [ 条件 ]; do...
    done
    

4. 用户输入

  • 使用 read 命令读取用户输入:
    read num
    

5. 算术运算

  • 使用 $((表达式))expr 命令:
    sum=$((num1 + num2))
    result=$(expr $num1 + $num2)
    

6. 目录操作

  • 创建目录:mkdir
  • 设置权限:-m 754
  • 判断目录是否存在:[ -d 路径 ]

四、实验收获与建议

  • 语法严谨性:Shell 对空格、符号非常敏感,需严格遵循语法规则。
  • 错误处理:在脚本中应加入充分的错误判断,如目录是否存在、除数是否为0等。
  • 调试技巧:可使用 set -x 开启调试模式,或逐行执行排查错误。

五、完整脚本示例

#!/bin/bash# 变量定义与使用
a="hello world"
echo $a# 循环与算术
num1=1
num2=1
sum=2
for((i=1; i<=8; i++))
dotmp=$((num1 + num2))echo -n "+$tmp"num1=$num2num2=$tmpsum=$((sum + tmp))
done
echo "=$sum"# 目录创建
sudo mkdir -m 754 /home/userdata
temp="/home/userdata/user"
for i in {1..5}; doif [ ! -d "$temp$i" ]; thenmkdir -m 754 "$temp$i"echo "创建目录:$temp$i"elseecho "目录已存在:$temp$i"fi
done# 简单计算器
while true; doecho "Input the first number (or 'q' to quit):"read number1if [ "$number1" = "q" ]; thenecho "Goodbye!"breakfiecho "Input the operator (+, -, *, /):"read opecho "Input the second number:"read number2case $op in+) result=$((number1 + number2)) ;;-) result=$((number1 - number2)) ;;\*) result=$((number1 * number2)) ;;/)if [ $number2 -eq 0 ]; thenecho "Error: Division by zero!"continueelseresult=$((number1 / number2))fi;;*)echo "Error: Invalid operator!"continue;;esacecho "Result: $number1 $op $number2 = $result"
done
http://www.dtcms.com/a/492009.html

相关文章:

  • RHCSA作业1
  • 邹城有做网站的吗网站建设坂田
  • 外贸自助建站上海市企业网站建设
  • python(入门)函数及lambda表达式
  • 衡水市网站建设seo推广软件下载
  • 提供邯郸移动网站建设高职专业建设管理网站
  • ros2常用命令
  • 网站建设维护要求济南做网站哪里好
  • 2个网站 同意内容 百度优化什么网站专门做二手物品
  • 【AI大模型学习路线】第三阶段之RAG与LangChain——第十九章(实战基于Advanced RAG的PDF问答)系统部署与测试?
  • 访答知识库#Pdf转word#人工智能#Al编辑器#访答RAG#企业知识库,个人知识库,本地知识库,访答编辑器,访答浏览器……
  • python可以做网站前端wordpress 实名
  • Flutter命名路由配置使用指南
  • Flutter+D3.js强强联合,打造高性能动态数据看板
  • Flutter布局 --- Container
  • 广州搬家公司外贸seo网站推广
  • 简单测试支持运行多种语言程序的工具run
  • 缓存策略:多级缓存设计,热点数据如何高效处理?
  • 兰州网站制作公司在哪里昌平网站制作
  • 中国银行门户网站旅行社网站建设方案论文
  • Java学习开发过程是一个解剖牛[特殊字符]的过程
  • 用deepseek做图表,分析相控阵天线的测试数据
  • 有关房地产开发建设的网站网业协同机制
  • 做微商如何引流推广?怎么找客源?手机网络优化
  • 电商客服机器人与客服AI软件:打通电商“服务-运营”数据闭环
  • 个人网站备案名称大全太原网站建设
  • 外贸哪家做网站好看的网站案例
  • 网站做推广网站不想让百度收录
  • AXI总线专题-AXI转SPI(总体框架)
  • [Docker集群] Docker 数据持久化实操命令清单