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

Shell 编程核心基础:输入输出与运算详解

一、引言

在 Linux 系统管理与自动化运维领域,Shell 脚本凭借其强大的灵活性与高效性成为必备技能。其中,输入输出处理与数据运算是 Shell 编程的核心基础,掌握这些知识能让脚本实现数据交互、文件操作及逻辑计算等关键功能。


二、输入输出核心操作

2.1 重定向:精准控制数据流向

重定向用于改变命令的输入输出源,分为覆盖式与追加式两类:

覆盖式重定向(> / <)

# 将echo内容覆盖写入文件

echo "file1.txt" > file.txt

# 从文件读取内容作为命令输入

cat < file.txt

追加式重定向(>> / <<)

# 追加内容到文件末尾

echo "file2.txt" >> file.txt

# 多行内容追加(EOF分界符)

cat << EOF >> config.ini

[db]

host=127.0.0.1

port=3306

EOF

2.2 管道符:命令间的数据桥梁

管道符 | 用于将前一个命令的输出作为后一个命令的输入,实现流水线处理:

# 过滤环境变量中的SHELL信息

env | grep SHELL

# 统计当前目录文件数

ls -l | wc -l

2.3 后台执行:释放终端资源

& 符号可将命令置于后台执行,避免阻塞终端:

# 前台执行(阻塞4秒)

sleep 4

# 后台执行(立即返回)

sleep 10 &

# 查看后台进程

ps aux | grep sleep

2.4 EOF:动态生成格式化内容

EOF(End of File)用于在脚本中生成带格式的多行内容,支持自定义分界符:

# 生成请假条(注意EOF需顶格)

cat << EOF

=================请假条=================

尊敬的王老师:

        我因身体不适,需请假1天。

        请假人:张三 日期:2023-10-01

EOF

  • 技巧:使用 <<- 可自动忽略 EOF 前的制表符(Tab),方便代码缩进。

三、输出格式化:让信息清晰易读

3.1 echo:灵活的输出工具

  • 常用选项
    • -n:不自动换行
    • -e:启用转义字符(如 \n 换行、\t 制表符)

echo -e "姓名:张三\n年龄:25\t职位:运维工程师"

颜色控制
通过转义序列 \033[背景色;字体色m 设置颜色(结尾用 \033[0m 恢复默认):

echo -e "\033[41;37m 红底白字警告! \033[0m"

颜色代码表

颜色字体色(3x)背景色(4x)
黑色3040
红色3141
绿色3242
黄色3343

四、数据运算:让脚本动起来

4.1 整数运算:基础算术操作

  • 运算符+(加)、-(减)、*(乘)、/(除)、%(取余)
  • 计算方式
    • $((表达式)):最常用,支持变量与运算符

a=10

b=3

echo $((a * b + 5)) # 输出35

let 命令:直接对变量赋值

let "c = a * b + 5"

echo $c # 输出35

expr 命令:需转义乘号 *

expr $a \* $b + 5 # 输出35

4.2 赋值运算:简化变量操作

  • 复合赋值+=-=*=/=%=

a=5

a+=3 # 等价于 a=a+3,结果8

a*=2 # 等价于 a=a*2,结果16

 自增 / 自减++--(前置 / 后置不影响数值结果)

a=5 echo $((a++)) # 输出5,a变为6

echo $((++a)) # 输出7,a变为7

 

4.3 案例:鸡兔同笼问题

需求:已知头数 h 和脚数 f,计算鸡兔数量。
脚本

#!/bin/bash

h=$1 # 头数

f=$2 # 脚数

rabbit=$(( (f - 2*h) / 2 )) # 兔的数量

chicken=$(( h - rabbit )) # 鸡的数量

echo "鸡:$chicken 只,兔:$rabbit 只"

 执行

bash script.sh 30 88 # 输出:鸡:16 只,兔:14 只


 

相关文章:

  • dexcap升级版之DexWild——面向户外环境的灵巧手交互策略:人类和机器人演示协同训练(人类直接带上动捕手套采集数据)
  • [Spring]-AOP
  • Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
  • 《基于Apache Flink的流处理》笔记
  • idea中 maven 本地仓库有jar包,但还是找不到,解决打包失败和无法引用的问题———————————————— 版权声明:本文为博
  • 【idea】分享一个关于Maven依赖管理好用的插件
  • x32dbg SwissArmyKnife 插件导入map文件不生效
  • IDEA 中 Undo Commit,Revert Commit,Drop Commit区别
  • IDEA安装迁移IDEA配置数据位置
  • pyarmor加密python程序
  • LLMControlsArm开源程序是DeepSeek 控制熊猫机械臂
  • IDEA 中 Maven Dependencies 出现红色波浪线的原因及解决方法
  • Caliper 负载(Workload)详细解析
  • 华为云学堂-云原生开发者认证课程列表
  • 基于React + FastAPI + LangChain + 通义千问的智能医疗问答系统
  • BugKu Web渗透之eval
  • vue生成二维码图片+文字说明
  • html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
  • JS设计模式(4):观察者模式
  • LabVIEW工业级多任务实时测控系统
  • php网站开发工具/百度登录入口官网
  • 个人定制网站怎么做/汕头网站建设方案优化
  • 安阳 做网站/电子制作网站
  • 住房和城乡建设部贰级建造师网站/网站设计公司有哪些
  • 网站推广的主要方法有哪些?/小程序制作一个需要多少钱
  • 自己做的网站上传/软文代写接单平台