shell编程-1

shell编程

1 初识shell

1.1 文件描述符与输出重定向

FD (file descriptor)

FD值英文含义
0Standard Input正确输入,并返回在前端
1Standard Output正确返回值
2Standard Error Output错误返回值

常见格式

a.txt

1>a.txt 标准正确输出到a.txt

2>a.txt 准错误输出到a.txt

&>a.txt 混合输出重定向

1>&2 正确返回值传递给2输出通道,&2表示2输出通道

2>&1 错误返回值传递给1输出通道,&1表示1输出通道

image-20240416191157539

2>1 表示把2输出重定向到文件1中

image-20240416191730638

例1:nginx -V

目的:筛选出nginx的版本号

使用命令nginx -V |grep version

image-20240416184252322

判断命令nginx -V |grep version执行是否正确

echo $?

输出为1,表示以上输出是标准错误输出,应使用重定向输出管道2

image-20240416184533598

将标准错误输出管道2的值传递给标准正确输出1管道,标准正确输出的内容才可被grep过滤

nginx -V 2>&1 |grep version

image-20240416185036788

image-20240416185410519

例2:当前目录下只有a.txt,没有b.txt

  • 1 通道

image-20240416185619389

  • 2 通道

image-20240416185906232

1and2通道:2通道错误返回值传递给1输出通道,转为正确输出。正确的输出和错误的输出都定向到了file.out这个文件中

image-20240416185754969

1.2 cat输入重定向

格式:cat >> file.txt << 111

content

111
image-20240416190558228

1.3 历史命令

补全   bash-completion # 增加补全
历史   history
别名   alias
快捷键  
前后台作业
管道
命令排序执行
; && || 
; 命令分割,在一行中执行多条语句
&& 一行中执行多条语句,前成功后面再执行
|| 一行中执行多条语句,前面不成功,后面再执行
通配符
{} ?*
正则表达式 脚本
  • 历史命令

    1 查看历史命令
    		history 			# /etc/profile 下的historysize 可以修改
    2 调用历史命令 	
        上下健
        esc . 上一条命令的最后一个参数
        Ctrl+r 在历史命令中查找,输入关键字调出之前的命令 
    3 别名
    		查看别名
    			alias
    		设置别名 
    			临时设置
          # alias aa='df -Th'
          # aa
    		永久设置
          # vim /root/.bashrc
    4 小小技巧:显示历史命令执行时间 
    		1.设置变量:
    			HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S" 
    		2.再次执行history查看结果
    

2 shell 脚本规范

helloworld.sh .sh代表这个文件是个shell脚本,第一个原因,让别人认的这个是shell脚本,sh后缀有高亮显示。

  • shell文件head

    #!/usr/bin/env bash ---shebang蛇棒, 解释器, 翻译
    拓展名后缀,如果省略.sh则不易判断该文件是否为shell脚本
    1.  2. #
    3. #
    3. # Author: newrain
    4. # Email: newrain@163.com           ---这就是注释, 你没看错
    5. # Github: https://github.com/newrain001
    6. # Date: 2019/**/**
    7. printf "hello world\n"
    
  • 执行脚本方式

    1 sh 脚本.sh
    2 bash 脚本.sh
    3 ./脚本.sh 			# 需要执行权限
    4 .  脚本.sh
    5 source 脚本.sh
    

3 变量的类型

  • 变量

    • bash作为程序设计语言和其它高级语言一样也提供使用和定义变量的功能
  • 预定义变量、环境变量、自定义变量、位置变量

    • 预定义变量

      变量变量含义
      $?最后一次执行的命令的返回状态。如果这个变量的值为 0,则证明上一条命令正确执行;如果这个变量的值为非 0 ,则 证明上一条命令执行错误
      $$当前进程的进程号(PID)
      $!后台运行的最后一个进程的进程号(PID)
      [root@newrain sh]# ls
      count.sh hello.sh parameter2.sh parameter.sh  #ls命令正确执行
      [root@newrain sh]# echo $?
      0
      #预定义变量"$?"的值是0,证明上一条命令正确执
      
      [root@newrain sh]# vim variable.sh 
      #!/bin/bash
      echo "The current process is $$" 
      #输出当前进程的PID 
      #这个PID就是variable.sh脚本执行时生成的进程的PID
      
      [root@newrain sh]# sleep 3000 & 
      [1] 12165 
      #符号"&"的意思是把命令放入后台执行 
      [root@newrain sh]# echo $!
      12165
      
    • 环境变量

      • shell在开始执行时已经定义好的

      • env 查看所有环境变量

      • set 查看所有变量

      • 环境变量拥有可继承性:export之后就拥有继承性

      • export 导出变量(作用范围)

      • 临时生效

        [root@newrain ~]# IPADDR=192.168.1.1
        [root@newrain ~]# echo $IPADDR
        192.168.1.1
        
      • 永久生效

        写到以下环境变量配置文件中:
        
        系统级别的文件,配置之后所有用户都会生效
        /etc/profile # 配置环境变量的文件
        /etc/bashrc
        用户级别的文件,配置完成之后只针对当前用户生效
        $HOME_DIR
        .profile
        .bashrc
        
        常用环境变量:USER UID HOME HOSTNAME PWD PS1 PATH
        PATH:存储所有命令所在的路径
        
    • 自定义变量

      变量名称=值

      变量名称:
      只能由字母,数字,下划线组成,不能以数字开头;
      
      注意:应该让变量名称有意义;
      	= 赋值符号 前后不能有空格 ;
      	值: 所有的字符串和数字都可以;
      	引用变量: $变量名 或 ${变量名}。
      	
      
      查看变量: echo $变量名 set(所有变量:包括自定义变量和环境变量)
      取消变量: unset 变量名 仅在当前shell中有效
      作用范围: 仅在当前shell中生效
      
  • 常用命令

    bg %num # 将前台进程放到后台执行

    jobs # 查看任务

    fg %num # 将后台进程放到前台执行

  • awk

    awk '{print $1}' # 默认以空为分隔符,打印第一列

    -F':' # 指定冒号分隔符

    awk -F':' '{print $1}' # 以:为分割符,打印第一列

    awk 'NR==2{print $2}' # 以空格为分隔符,打印第二行(NR==2)的第二列

    将命令的结果当做字符串赋予给变量
    time=`date +%Y年%m月%d日-%H:%M:%S-%A` 
    time=$(date +%Y年%m月%d日-%H:%M:%S-%A)
    这两种赋值效果一样
    

练习1

编写一个shell脚本,用于搜集其执行主机的信息,打印结果如下: 
    [root@tiger tmp]# ./test.sh
    2012年 05月 24日 星期四 17:07:45 CST
    当前的用户为 root
    当前用户的宿主目录为 /root 用户的标识为 0
    主机名称为 newrain
    网卡的IP地址为 192.168.1.106
##脚本源码如下
#!/usr/bin/bash
# 获取主机基本信息
time=`date +%y年%m月%d日-%H:%M`
ip=`ifconfig eth0|grep inet|awk '{print $2}'` echo "现在的时间是:" $time
echo "当前的用户是:" $USER
echo "当前的用户标识:" $UID
echo "当前的主机名称是:" $HOSTNAME
echo "当前可用网卡IP是:" $ip
取根分区剩余空间:
		# df -h /dev/sda2 |awk 'NR==2{print $4}' 371G
取当前系统剩余内存:
		# echo "现在的剩余内存是:"`free -m |awk 'NR==2{print $4}'`
		现在的剩余内存是:12813M
取当前cpu平均负载:
		# echo 现在cpu的`uptime |cut -d, -f3-` //-d指定分隔符,-f指定显示区域,3-第三列以后(包括第三列)
		现在cpu的 load average: 0.07, 0.12, 0.11
		# echo 现在cpu的`uptime |awk -F"," '{print $4,$5,$6}'`
		现在cpu的 load average: 0.00 0.04 0.10

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/549963.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

5_vscode+valgrind+gdb调试程序

需求 项目程序, 读取串口数据, 出现程序崩溃问题valgrind 可以调试定位内存问题: 内存泄漏,非法地址访问,越界访问等内存问题vscode gdb 可视化调试效果, 比命令行简单快捷很多期望使用vscode valgrind gdb 调试程序内存异常, 崩溃退出的问题 环境准备 sudo apt install v…

大话设计模式之解释器模式

解释器模式是一种行为设计模式&#xff0c;它用于解释语言的语法或表达式&#xff0c;将其转换为可执行的程序或操作。这种模式通常用于处理类似编程语言或规则引擎中的问题。 在解释器模式中&#xff0c;通常有两种角色&#xff1a; 解释器&#xff08;Interpreter&#xff0…

Linux网络基础(一)

网络发展 对于我们国家来讲&#xff0c;网络的发展&#xff0c;不仅仅是互联网公司在发展&#xff0c;提供重要推动力的还有三大运商 随之而来的是新设备的诞生。比如集线器&#xff0c;网线&#xff0c;光纤&#xff0c;调制解调器&#xff0c;路由器&#xff0c;防火墙&am…

盲盒小程序成为收益“法宝”?盲盒线上如何发展

近年来&#xff0c;盲盒在年轻人中掀起了一股潮玩热风&#xff0c;受到了不少年轻人的青睐&#xff0c;盲盒商品更是在不断创新中&#xff0c;收藏价值逐渐提高。随着市场规模的扩大&#xff0c;越来越多的玩家和商家涌入到了市场中&#xff0c;盲盒的商业模式正在加快发展中。…

VBA脚本: excel隐藏和展开指定行 【图文】

打开开发工具功能 【文件】-》【选项】-》【自定义功能区】-》勾选【开发工具】-》【确定】 代开VBA编辑器 【开发工具】-》【Visual Basic】 插入模块 编写代码 所有sheet 关闭 Sub HideRowsInAllSheets()Dim ws As WorksheetDim i As Integer 循环遍历所有工作表For E…

使用Python进行自动化测试【第163篇—自动化测试】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 如何使用Python进行自动化测试&#xff1a;测试框架的选择与应用 自动化测试是软件开发过程…

ubuntu+安装Google Protobuf 库

本文参考文章如下 https://blog.csdn.net/wzw1609119742/article/details/119712422#t18https://blog.csdn.net/j8267643/article/details/134133091https://blog.csdn.net/jax_fanyang/article/details/135937002?spm1001.2014.3001.5502 现在论坛上据大部分的教程都是下面…

java正则表达式教程

什么是正则表达式&#xff1a; 正则表达式是一种用来描述字符串模式的语法。在 Java 中&#xff0c;正则表达式通常是一个字符串&#xff0c;它由普通字符&#xff08;例如字母、数字、标点符号等&#xff09;和特殊字符&#xff08;称为元字符&#xff09;组成。这些特殊字符可…

ubuntu22安装宝塔面板

方法一&#xff1a;运行安装宝塔命令 wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484bec 安装成功后&#xff0c;需到服务器管理后台的安全组中配置新规则&#xff0c;放行宝塔面板的端口&#xff08;以阿…

springboot整合dubbo实现RPC服务远程调用

一、dubbo简介 1.什么是dubbo Apache Dubbo是一款微服务开发框架&#xff0c;他提供了RPC通信与微服务治理两大关键能力。有着远程发现与通信的能力&#xff0c;可以实现服务注册、负载均衡、流量调度等服务治理诉求。 2.dubbo基本工作原理 Contaniner:容器Provider&#xf…

Flink CDC在阿里云DataWorks数据集成应用实践

摘要&#xff1a;本文整理自阿里云 DataWorks 数据集成团队的高级技术专家 王明亚&#xff08;云时&#xff09;老师在 Flink Forward Asia 2023 中数据集成专场的分享。内容主要为以下四部分&#xff1a; 阿里云 DataWorks 数据集成介绍基于 Flink CDC 数据集成新版引擎架构和…

数字革命的先锋:Web3对社会的影响

引言 在信息技术飞速发展的当下&#xff0c;Web3作为一个新兴的互联网模式&#xff0c;正在逐渐改变我们的生活方式、商业模式和社会结构。本文将深入探讨Web3的核心特点、它在各个领域中的应用以及对社会产生的深远影响。 1. Web3的核心特点 1.1 去中心化 Web3强调去中心化…

03.卸载MySQL

卸载MySQL 1.Windows卸载MySQL8 停止服务 用命令停止或者在服务中停止都可以 net stop mysql&#xff08;服务名字可以去服务里面看一下&#xff09;控制面板卸载MySQL 卸载MySQL8.0的程序可以和其他桌面应用程序一样直接在控制面板选择卸载程序&#xff0c;并在程序列表中…

Excel高效办公:人力资源管理(AI版)

AI人力资源管理一本通&#xff1a;147个“温馨提示”53个“教您一招”&#xff0c;掌握使用Excel高效完成人力资源管理工作的“心法”&#xff0c;助你早做完、不加班。 一本书掌握人力资源高效管理的“心法”&#xff01; 案例丰富&#xff0c;参考性强&#xff1a;本书不是…

AR、VR、MR 和 XR——它们的含义以及它们将如何改变生活

我们的工作、娱乐和社交方式正在发生巨大变化。远程工作的人比以往任何时候都多,屏幕已成为学习和游戏的领先平台。这种演变为元宇宙铺平了道路——如今,像 Meta Quest 2 这样的流行设备将您无缝地带入一个身临其境的世界,您可以在其中购物、创作和玩游戏、与同事协作、探索…

ChatGPT深度科研应用、数据分析及机器学习、AI绘图与高效论文撰写教程

原文链接&#xff1a;ChatGPT深度科研应用、数据分析及机器学习、AI绘图与高效论文撰写https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247601506&idx2&sn5dae3fdc3e188e81b8a6142c5ab8c994&chksmfa820c85cdf58593356482880998fc6eb98e6889b261bf621e1d…

win10 鼠标箭头自己乱动解决方案

我这里只说我碰到的然后我的解决方案&#xff0c;不一定对其他问题有效&#xff1b; 1. 首先拔掉鼠标线查看鼠标箭头是否仍然在乱动&#xff0c;如果是则非鼠标问题&#xff0c;如果不再乱动则是鼠标的问题&#xff1b;验证非鼠标问题&#xff1b; 2. 因为鼠标乱动跟鼠标无关…

Django中的实时通信:WebSockets与异步视图的结合【第167篇—实时通信】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在现代Web应用程序中&#xff0c;实时通信已经成为了必不可少的功能之一。无论是在线聊天、…

AppBuilder升级!工作流编排正式上线!AssistantsAPI开放邀测!

>>【v0.5.3版本】 上线时间&#xff1a;2024/4/14 关键发版信息&#xff1a; 低代码态&#xff1a;新增工作流&#xff0c;低代码制作组件 自定义组件&#xff1a;支持用户自定义创建组件&#xff0c;并被Agent自动编排调用
 工作流框架&#xff1a;组件支持流式编排…