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

Shell练习2

文章目录

  • 流程控制
    • 一、select in循环
    • 二、Shell函数
  • 输出重定向
  • 输入重定向

流程控制

一、select in循环

select variable in value_list
do
	statements
done

取值列表value_list中内容会以菜单的形式显示出来
注意select是无限循环,输入空值不会结束循环,只有遇到break语句,或者Ctrl + D才能结束循环

二、Shell函数

  1. 函数定义

    function name(){
    	statements
    	[return value]
    }
    # [return value] 可写可不写
    
  2. 函数调用

    • 不传参:name
    • 传参:name param1 param2 param3

    注意Shell 不限制定义和调用的顺序

    • 例子:

      function getSum(){
              local sum=0
              for n in $@;do
              # $@表示所有参数
                      ((sum+=n))
              done
              return $sum
      }
      getSum 10 20 30 40
      echo "返回值:$?"
      # $? 表示函数的退出状态(返回值)
      

    在这里插入图片描述

    • 在函数内部可以使用$n 来表示参数次序,比如$1 表示第一个参数,$2 表示第二个参数
    • 除了$n ,还有另外三个比较重要的变量:
      1. $# 获取传递参数的个数
      2. $@或者$* 可以一次性获取所有的参数
      3. 可以使用$@ 直接遍历函数参数

输出重定向

  1. 标准输出重定向

    • command > file :以覆盖的方式,将command的正确结果输出到file文件
    • command >> file:以追加的方式,将command的正确结果输出到file文件
  2. 标准错误输出重定向

    • command 2> file :以覆盖的方式,将command的错误信息输出到file文件
    • command 2>> file:以追加的方式,将command的错误信息输出到file文件
  3. 正确输出和错误信息同时保存

    • command >file 2>&1:以覆盖的方式,将错误信息和正确输出同时保存在file中
    • command >>file 2>&1:以追加的方式,将错误信息和正确输出同时保存在file中
    • command >file 2>file2:以覆盖的方式,将正确的输出结果输出到file中,错误的信息输出到file2中
    • command >>file 2>>file2:以追加的方式,将正确的输出结果输出到file中,错误的信息输出到file2中

    -注意,在输出重定向中,>表示是覆盖,>>表示追加
    -输出重定向的完整写法为fd>file或者fd>>file,其中fd为文件描述符,如果不写则默认为1,也就是标准输出文件。fd和>之间不能有空格,>和file之间可以有空格

输入重定向

  • command < file:将file文件中的内容作为command的输入

  • command << END:从标准输入(键盘)读取数据,知道遇到分界符END才停止(分界符可以为任意的字符串,用户自己定义)

  • command <file >file2:将file作为command的标准输入,并将command的处理结果输出到file2中

  • 例子:统计文档中有多少行文字
    wc命令可以用来对文本进行统计,包括单词个数、行数和字节数等,用法如下:
    wc [选项] [文件名]
    其中,-c 为统计字节数,-w统计单词数,-l统计行数
    则:wc -l <file

  • 例子2:逐行读取文件内容

    1. 使用while循环
    while read row;do
    	echo $row
    done <file.txt
    
    1. 使用管道符和while循环
    	cat file.txt | while read row;do
    		echo $row
    	done 
    

相关文章:

  • [c语言]小课堂 day2
  • Spark实时数仓的项目实现
  • 数据挖掘经典十大算法_K-Means算法
  • JavaScript面向对象
  • 吐血总结 40道Python面试题集锦
  • Go 语言中的基本类型以及变量声明与初始化(Let‘s Go 三)
  • 前端基础01:HTML
  • java计算机毕业设计前台点菜系统源代码+数据库+系统+lw文档
  • QT QString编辑字符串-查询-类型转换操作
  • NFT重构票务系统
  • 国际电工委员会发布标准 IEC 62077:2022 《光纤互连设备和无源元件-光纤环行器-通用规范》
  • vue3.0--3.isRef、toRefs、toRef、readonly,公共数据配置、网络配置、app.use插件配置、路由配置
  • 【python】(十八)python常用第三方库——pymysql
  • 供应水溶性喹啉腈磺酸盐母体,QM-SO3,CAS:1800102-18-4
  • Unity Shader LOD详解
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • angular学习第一篇-----环境搭建
  • Codepen 每日精选(2018-3-25)
  • Date型的使用
  • egg(89)--egg之redis的发布和订阅
  • Linux链接文件
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Sequelize 中文文档 v4 - Getting started - 入门
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 从零开始的无人驾驶 1
  • 仿天猫超市收藏抛物线动画工具库
  • 汉诺塔算法
  • 如何进阶一名有竞争力的程序员?
  • 什么软件可以剪辑音乐?
  • 一、python与pycharm的安装
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #define、const、typedef的差别
  • #QT(串口助手-界面)
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (算法设计与分析)第一章算法概述-习题
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • .Net core 6.0 升8.0
  • .net FrameWork简介,数组,枚举
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 的程序集加载上下文
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .net访问oracle数据库性能问题
  • .net解析传过来的xml_DOM4J解析XML文件
  • @拔赤:Web前端开发十日谈
  • [C/C++] -- 二叉树
  • [CF482B]Interesting Array
  • [CSS3备忘] transform animation 等
  • [ES-5.6.12] x-pack ssl
  • [NOIP2000] 乘积最大
  • [Notes]python argparse模块
  • [one_demo_15]模拟交通灯管理系统
  • [OS] linux常见问题汇总