shell编程(一)

news2024/11/23 22:49:51

shell 简介

Shell 是一个用 C 语言编写的程序,一般我们说的shell编程,是指编写shell脚本。

Shell 负责完成用户与内核之间的交互(shell是一个命令解释器,负责将用户的命令解析成操作系
统所能理解的指令)

在这里插入图片描述

第一个shell脚本

创建一个shell脚本–test.sh

#! /bin/sh
echo "hello world"

echo "hello world"很简单就是输出字符串hello world

#! /bin/bash -->告诉操作系统用哪种类型的shell来解释执行该程序

如何执行改脚本,创建test.sh是个普通文件,使用ls -l可以查看,该文件没有可执行权限,使用

chmod u+x test.sh,给脚本添加上可执行权限。

ghost-linux@ghost-linux:~/shell$ ./test.sh 
hello world

输入和输出

echo

echo string

echo 是shell中用于输出的指令

​ 如果需要转义,可以加上-e选项;用-n选项来禁止echo命令输出后换行

在这里插入图片描述

read

read语句从键盘或文件的某一行文本中读入信息,并将其赋给一个变量

read varible1 varible2 ...


管道

cmd1 | cmd2

​ 管道就是将一个命令cmd1的输出当做输入传给另一个命令cmd2

|是管道符号

​ 一般情况下,管道后面的操作都是查找grep、切割awk或替换seb

在这里插入图片描述

重定向

  • 系统已经定义的文件描述符

    • 标准输入:0
    • 标准输出:1
    • 标准错误:2
  • 重定向命令

    命令作用
    cmd > file将cmd重定向到file
    cmd >> file将cmd重定向追加到file
    m <& n将文件描述符n输入重定向到m
    m >& n将文件描述符m输出重定向到n
    cmd < file将file作为输入给cmd
    cmd << deli从标准输入中读入,直至遇到deli分界符
    cmd > file 2>&1把标准输出和标准错误一起重定向到file中

在这里插入图片描述

exec

  • exec执行shell命令

  • 操作文件描述符

    使用exec创建的文件描述符重定向,是永久有效,直到显示取消重定向,可以看下面例子

    #! /bin/bash
    
    echo "input 6<&0 name ouput to stdout"
    exec 6<&0 0<name 
    read var
    read var1
    echo $var
    echo $var1
    
    echo "close fd--6"
    exec 0<&6 6<&-
    echo -n "read from stdin:"
    read num
    echo "num = $num"
    
    echo "test over" >> name
    
    echo this is file name:
    cat name
    
    echo "redirect stdout to exec.log"
    exec  1>exec.log
    wc -l name
    
    echo "redirect stdout to stderr"
    exec 1>&2
    echo "redirect stdout to stderr over"
    wc -l name
    
    echo "ouput exec.log"
    cat exec.log
    
    

变量

shell中用户可以建立变量来存储数据,但不支持数据类型,变量名命名规则:数字、字母、下划线,不能以数字开头。

环境变量

当前shell的环境设置的一些变量

export—设置新的环境变量
env—显示所有环境变量
set—显示所有本地的shell变量
unset—清除环境变量**(高危)**

常见的环境变量:

PWD=/home/ghost-linux/shell — 当前路径(绝对路径)
HOME=/home/ghost-linux — 家目录
USERNAME=ghost-linux —用户名

创建一个新的环境变量:
在这里插入图片描述

  • 在文件中添加
    1. /etc/profile文件中,使用export创建环境变量
    2. 执行source /etc/profile使环境变量生效

用户自定义变量

​ 1、在shell编程中通常使用全大写变量,方便识别
​ 2、变量的使用:在变量前加$
​ 3、Linux Shell/bash从右向左赋值
​ 4、使用unset命令删除变量的赋值 unset 变量名
COUNT=1
​ 注意:
​ 1、无数据类型,默认为字符串
​ 2、“=”两边没有空格

位置变量 即 命令行参数

  • $0:与键入的命令行一样,包含脚本文件名

  • $1,...$9:分别包含第一个到第九个命令行参数

  • $#:包含命令行参数的个数

  • $@ / $*:包含所有命令行参数 ——>“$1....$9”,区别在于$*返回的是一个字符串整体,$@是以空格分开的字符串集

  • $?:包含前一个命令的退出状态

  • $$:包含正在执行进程的ID号

#! /bin/bash

echo this is '$0' = $0
echo '$1' = $1
echo '$2' = $2
echo '$#' = $#

echo '$@' = $@
echo '$*' = $*
echo '$$' = $$
echo '$?' = $?

在这里插入图片描述

预定义变量

​ 预定义变量和环境变量相类似,也是在shell一开始时就定义了的变量,所不同的是,用户只能根据shell的定义来使用这些变量,而不能重定义它。所有预定义变量都是由$符和另一个符号组成

  • $?:打印前一个命令的退出状态
  • $$:打印正在执行进程的ID号
  • $!:后台运行的最后一个进程的进程号(PID)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue刷新后页面数据丢失问题的解决过程

在做vue项目的过程中有时候会遇到一个问题,就是进行F5页面刷新的时候,页面的数据会丢失,这篇文章主要给大家介绍了关于Vue刷新后页面数据丢失问题的解决过程,需要的朋友可以参考下&#xff01; 一、为什么刷新后数据会丢失 vuex存储的数据只是在页面中&#xff0c;相当于全局变…

[附源码]计算机毕业设计学习帮扶网站设计与实现Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Linux文件系统调用接口文件描述符的理解

&#x1f9f8;&#x1f9f8;&#x1f9f8;各位大佬大家好&#xff0c;我是猪皮兄弟&#x1f9f8;&#x1f9f8;&#x1f9f8; 文章目录一、对系统调用进行封装的理由二、文件的系统调用接口① openopen的选项--位图open的权限程序中设置umask权限掩码②close③write④read三、…

字节输入流【InputStream】(读文件)

字节输入流【InputStream】 java.io.InputStream 抽象类是表示字节输入流的所有类的超类&#xff0c;可以读取字节信息到内存中。它定义了字节输入流的基本共性功能方法。 public void close(): 关闭此输入流并释放与此流相关联的任何系统资源。 public abstract int read(): …

Telegraf

Telegraf是什么&#xff1f; Telegraf 是 InfluxData 公司开源的一款十分流行的指标采集软件&#xff0c;可以从数据库、系统和物联网传感器收集和发送度量和事件&#xff0c;它用Go编写&#xff0c;编译成一个没有外部依赖的二进制文件–需要非常少的内存&#xff0c;相…

数仓建模理论(一)

学习目录一、关系建模与维度建模二、维度表和事实表&#xff08;重点&#xff09;三、事实表类型四、维度模型分类一、关系建模与维度建模 &#xff08;1&#xff09;关系建模 关系建模将复杂的数据抽象为两个概念——实体和关系&#xff0c;并使用规范化的方式表示出来。关系…

【计算机毕业设计】73.房屋租赁系统求租合同源码

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;房屋租赁系统当然也不能排除在外。房屋租赁系统是以实际…

Mybatis源码解析(八):插件机制

Mybatis源码系列文章 手写源码&#xff08;了解源码整体流程及重要组件&#xff09; Mybatis源码解析(一)&#xff1a;环境搭建 Mybatis源码解析(二)&#xff1a;全局配置文件的解析 Mybatis源码解析(三)&#xff1a;映射配置文件的解析 Mybatis源码解析(四)&#xff1a;s…

flex布局列表页(一行内容比较多,长度比较长)

一、Flex 布局是什么&#xff1f; Flex 是 Flexible Box 的缩写&#xff0c;意为"弹性布局"&#xff0c;用来为盒状模型提供最大的灵活性。任何一个容器都可以指定为 Flex 布局。 二、基本概念 采用 Flex 布局的元素&#xff0c;称为 Flex 容器&#xff08;flex co…

Java开发必须掌握的运维知识 (九)-- Docker容器监控信息可视化仪表:Grafana

一、Grafana 是用来干什么的&#xff1f; Grafana 是一个监控仪表系统&#xff0c;它是由 Grafana Labs 公司开源的的一个系统监测 (System Monitoring) 工具。它可以大大帮助你简化监控的复杂度&#xff0c;你只需要提供你需要监控的数据&#xff0c;它就可以帮你生成各种可视…

jdk11新特性——JShell交互性工具

目录一、jshell概述二、jshell位置三、jshell示例3.1、示例一&#xff08;声明变量并赋值&#xff09;3.2、示例二&#xff08;输出打印内容&#xff09;3.3、示例三&#xff08;帮助命令&#xff09;一、jshell概述 java9引入了jshell这个交互性工具&#xff0c;让Java也可以…

BUUCTF Misc 黑客帝国 [MRCTF2020]你能看懂音符吗 [HBNIS2018]caesar [HBNIS2018]低个头

黑客帝国 下载文件 一长串16进制&#xff0c;复制到在线16进制转文本 很明显是一个RAR文件&#xff0c;使用脚本将16进制转换成文件 import binasciihex_data这里填十六进制数据 outopen(res.rar,wb) out.write(binascii.unhexlify(hex_data)) out.close() 需要密码&#xff…

[附源码]计算机毕业设计校园疫情防范管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

# 智慧社区管理系统-核心业务管理-03投诉信息

一 后端 1:entity package com.woniu.community.entity;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;Data AllArgsConstructor NoArgsConstructor public class Complaint {private int id;private int comId;private String c…

多功能跑步机外观及结构设计

目 录 摘 要 I Abstract II 第1章 绪论 1 1.1背景及意义 1 1.2国内外发展情况 2 1.3研究主要内容 3 第2章 多功能跑步机结构设计 5 2.1 传动机构设计 5 2.1.1 设计步骤及参数选择 5 2.1.2多楔带带轮结构和尺寸选择 8 2.2 电动机类型与参数的选择 10 2.2.1类型功率选择 10 2.2.2…

连连看核心算法与基本思想(附全部项目代码链接与代码详细注释)

文章目录0.说明1.基本要求2.思路分析(加入核心代码)2.1 游戏初始化局面2.2 两点是否可连2.3 游戏是否结束2.4 判断死锁3.注意事项与全部代码0.说明 对于数据结构和算法&#xff0c;我并不是很精通&#xff08;真的很一般&#xff09;&#xff0c;因此在这里只是做一个自己的简…

以太网 TCP协议(数据交互过程、窗口机制)

2.7.1 以太网 TCP协议&#xff08;数据交互过程、窗口机制&#xff09; 环境介绍&#xff1a; 1、客户端访问FTP服务器进行下载文件&#xff0c;由于FTP是基于TCP协议进行工作的&#xff0c;所以客户端在访问FTP服务器时必然会进行建立TCP连接。 2、通过在交换机上对任意端口进…

Bootstrap5 网格系统

Bootstrap 提供了一套响应式、移动设备优先的流式网格系统&#xff0c;随着屏幕或视口&#xff08;viewport&#xff09;尺寸的增加&#xff0c;系统会自动分为最多 12 列。 我们也可以根据自己的需要&#xff0c;定义列数&#xff1a; 111111111111444486612 Bootstrap 5 的…

Java项目:ssm客户关系管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 客户关系管理系统主要功能包括&#xff1a; 系统管理&#xff1a; 用户管理 日志管理 权限管理 角色管理 系统信息 客户管理 我的客户 联系跟进…

音视频学习(十三)——flv详解

简介 全称FLASHVIDEO&#xff0c;是一种新的视频格式&#xff0c;主要的特点是文件小、加载速度快。 结构 flv的结构相对简单&#xff0c;可以通过下图来初步了解其组成&#xff1a; flv flv header(9字节) flv bodyflv header Signature(3字节) Version(1字节) Flags(…