Shell编程规范与使用

news2024/11/26 0:31:21

一、Shell脚本概述

1)Shell的作用——命令解释器,“翻译官”

Linux 系统中的 Shell 是一个特殊的应用程序,它介于操作系统内核与用户之间,充当 了一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执 行的操作传递给内核执行,并输出执行结果

2)常见shell解释器

  • /bin/bash:是目前大多数Linux 版本采用的默认shell
  • /bin/sh:已经被bash替换
  • /bin/csh:类似c语言的shell
  • /bin/tcsh:整合了csh提供了更多功能
  • /bin/nologin:这个shell可以让用户无法登录

3)编程语言类型

面向对象 JAVA PYTHON C++ C# GO

面向过程     C Shell

强类型语言 JAVA C C++ C# GO 编译型语言,执行钱需要先编译,允许速度快

弱类型语言 PYTHON Shell PHP 解释型语言,不需要编译即可直接执行,常用与脚

4)Shell脚本

提前将可执行的命令语句写入一个文件,顺序执行,解释器逐行解释代码 

编写脚本代码

  • 使用vim文本编辑器
  • 每行一条Linux命令,按执行顺序依次编写

Shell脚本的构成

  • 脚本申明(解释器):若第一行为 "#!/bin/bash” ,表示此行以下的代码语句是通过 /bin/bash程序来执行,#!/bin/bash 为默认解释器。还有其他类型的解释器,比如 #! /usr/bin/python、 #!/usr/bin/expect
  • 注释信息:以 "#" 开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行
  • 可执行语句:比如 echo 命令,用于输出"  "之间的字符串
[root@localhost ~]# vim first.sh

#!/bin/bash
 
#this is first shell 

echo "HelloWorld"

赋予可执行权限

  • 使脚本具有可执行属性
[root@localhost ~]# chmod +x first.sh

Shell脚本的执行方法

1)绝对/相对路径指定脚本文件运行,需要执行用户拥有执行权限x,脚本会在子shell环境中运行

2)用bash/sh 程序执行脚本文件运行,不需要执行权限,脚本会在子shell环境中运行

3)用source/.指定脚本文件运行,脚本会在当前shell环境中运行(会影响当前所在目录、变量的值 等因素)

5)重定向与管道操作

交互式硬件设备

标准输入:从该设备接收用户输入的数据

标准输出:通过该设备向用户输出数据

标准错误:通过该设备报告执行出错信息

类型设备文件文件描述编号默认设备
标准输入/dev/stdin0键盘
标准输出/dev/stdout1显示器
标准错误输出/dev/stderr2显示器

重定向操作

类型操作符用途
重定向输入<从指定的文件读取数据,而不是从键盘输入
重定向输出>将输出结果保存到指定的文件(覆盖原有内容) 
>>将输出结果追加到指定的文件尾部
标准错误输出 2>将错误信息追加到指定的文件中(覆盖原有内容)
2>>将错误信息追加到指定的文件中 
混合输出&>将标准输出、标准错误的内容保存到同一个文件中
2>&1将标准错误输出重定向到标准输出

管道操作符号“|”

  • 将左侧的命令输出结果,作为右侧命令的处理对象
cmd1 | cmd2 [……|cmdn]
[root@localhost ~]# grep "bash$" /etc/passwd

root:x:0:0:root:/root:/bin/bash

teacher:x:500:500:BENET Linux Teacher:/home/teacher:/bin/bash

[root@localhost ~]grep "bash$" /etc/passwd | awk -F: '{print $1,$7}'  
#以冒号:分割,输出第1、7个字段

root /bin/bash

teacher /bin/bash

二、Shell脚本变量

1)Shell变量的作用、类型

变量的作用

用来存放系统和用户需要使用的特定参数(值)

  • 变量名:使用固定的名称,由系统预设或用户定义
  • 变量值:能够根据用户设置、系统环境的变化而变化

变量的类型

自定义变量:由用户自已定义、修改和使用

特殊变量:环境变量,只读变量,位置变量,预定义变量

2)自定义变量

定义一个新的变量

变量名以字母或下划线开头,区分大小写,建议全大写

变量名=变量值

查看变量的值

echo $变量名

[root@localhost ~]# Product=Python

[root@localhost ~]# Version=2.7.13

[root@localhost ~]# echo $Product

Python

[root@localhost ~]# echo $Product $Version

Python 2.7.13

赋值时使用引号

双引号:会把$当作特殊符号去引用变量的值

单引号:禁止引用其他变量值,会把$等特殊符号是为普通字符去使用

反撇号:命令替换,获取里面的命令执行后的输出结果,`……`效果等同于$()

从键盘输入内容为变量赋值

read [-p “提示信息”] 变量名

设置变量的作用范围

#两种格式可以混合使用

格式1:export 变量名 …

格式2:export 变量名=变量值 …
[root@localhost ~]# echo "$Product $Version"

Benet 6.0

[root@localhost ~]# export Product Version   #导出为全局变量

[root@localhost ~]# bash

[root@localhost ~]# echo "$Product $Version" #子程序引用全局变量

Benet 6.0

[root@localhost ~]# exit

永久全局变量添加

[root@localhost ~]# vim /etc/profile

#最后一行加入

export Product Version

[root@localhost ~]# source /etc/profile   #当前环境立即执行,也可以重启

[root@localhost ~]# echo "$Product $Version"

Benet 6.0

[root@localhost ~]# bash                  #切换shell环境

[root@localhost ~]# echo "$Product $Version"

Benet 6.0

整数变量的运算

expr 变量1 运算符 变量2 [运算符 变量3]…

常用运算符

加法运算:+

减法运算:-

乘法运算:\*

除法运算:/

求模(取余)运算:%

let命令

let是一个用于执行算术运算的命令。它可以将一个算术表达式作为参数,并将其计算结果赋值给一个变量。let命令支持的算术运算包括加、减、乘、除、取模等

3)特殊的Shell变量

环境变量

  • 由系统提前创建,用来设置用户的工作环境
  • 配置文件:/etc/profile、~/.bash_profile

常见的环境变量

  • PATH:指定可执行程序的搜索路径
  • HOME:指定当前用户的家目录
  • LANG:指定当前系统的语言环境
  • SHELL:指定当前Shell的路径
  • PS1:指定Shell提示符的格式
  • PWD:指定当前工作目录
  • TERM:指定当前终端的类型
  • USER:指定当前用户的用户名
[root@localhost ~]# echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/mysql/bin:/root/bin

[root@localhost ~]# PATH="$PATH:/root"

[root@localhost ~]# echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/mysql/bin:/root/bin:/root

只读变量

  • 用于变量值不允许被修改的情况
[root@localhost ~]# name=cloud

[root@localhost ~]# readonly name   //设置为只读变量

[root@localhost ~]# echo $name

cloud

[root@localhost ~]# name=yum

-bash:name:readonly variable        //只读变量不可以被重新赋值

[root@localhost ~]# 

[root@localhost ~]# unset name      //只读变量不可以被删除

-bash:unset:name:cannot unset:readonly variable

位置变量

  • 表示为$n,n为1~9之间的数字
[root@localhost ~]# ./myprog.sh one two three four five six
                                 ↑                       ↑
                         $1,第1个位置参数                ↑
                                                 $6,第6个位置参数

预定义变量

[root@localhost ~]# vim mybak.sh

#!/bin/bash

TARFILE=beifen-`date +%s`.tgz

tar zcf $RARFILE $* &> /dev/null

echo "已完成$0脚本,"

echo "共完成$#个对象的备份"

echo "具体内容包括:$*"

[root@localhost ~]# chmod +x mybak.sh

[root@localhost ~]# ./mybak.sh /etc/passwd /etc/shadow

已执行 ./mybak.sh 脚本,

共完成2个对象的备份

具体包括:/etc/passwd /etc/shadow

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

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

相关文章

接口协作--apipost接口协作工具

接口协作 apipost支持接口在线协作编辑功能&#xff0c;打开apipost创业一个团队&#xff0c;在创建一个项目。 在把需要一起协作的人员添加到团队中 在进行项目编辑把需要进行协作的人员拉取到项目中 之后在进入项目创建接口就可以进行接口协作了

scratch猫捉老鼠 少儿编程 电子学会图形化编程scratch编程等级考试二级真题和答案解析2023年3月

目录 scratch猫捉老鼠 一、题目要求 1、准备工作 2、功能实现 二、案例分析

kafka调试脚本的使用

创建名称为test的topic且副本数量3&#xff0c;partition数量6 /etc/kafka/kafka/bin/kafka-topics.sh --create --bootstrap-server 10.1.60.112:9092 --replication-factor 3 --partitions 6 --topic test 查看名称为test的topic信息 /etc/kafka/kafka/bin/kafka-topics.sh -…

uniapp微信小程序图片预览PreviewImage

一、说明 功能&#xff1a;点击图片预览大图&#xff0c;并且可以通过滑动查看不同图片的预览大图。 点击预览大图后&#xff1a; 二、上代码 参考uniapp官方文档 其提供了预览大图的函数uni.previewImage(OBJECT). //放大查看推荐图片enlargePicture(index) {console.log…

【Unity-ML】Unity机器学习(一)

安装环境&#xff1a;Windows10 Anaconda3(64-bit)&#xff0c;网上很多教程&#xff0c;例如这个anaconda下载及安装(保姆级教程) - 知乎anaconda包管理器和环境管理器&#xff0c;强烈建议食用 1.下载官网下载太慢可选用镜像下载 官网下载&#xff1a; Anaconda | Individua…

Softing FiberXpert 700光纤测试套件助力一级多模和单模光纤认证

FiberXpert 700是用于多模和单模的四路波长测试套件&#xff0c;不仅可以对光纤链路进行直观、灵活和快速地认证&#xff0c;而且可以导出数据报告。 测试网络安装以确保其符合指定标准的过程称为认证&#xff0c;并且这通常需要纸质文件作为符合标准的证明。而FiberXpert 700光…

Docker 的数据管理

一、Docker 的数据管理 管理 Docker 容器中数据主要有两种方式&#xff1a;数据卷&#xff08;Data Volumes&#xff09;和数据卷容器&#xff08;DataVolumes Containers&#xff09;。 1&#xff0e;数据卷 数据卷是一个供容器使用的特殊目录&#xff0c;位于容器中。可将宿…

为什么说网络安全行业是IT的风口行业?

前言 2023年网络安全行业的前景看起来非常乐观。根据当前的趋势和发展&#xff0c;一些趋势和发展可能对2023年网络安全行业产生影响&#xff1a; 5G技术的广泛应用&#xff1a;5G技术的普及将会使互联网的速度更快&#xff0c;同时也将带来更多的网络威胁和安全挑战。网络安全…

eBPF技术介绍

前言 eBPF起源于linux内核&#xff0c;它可以以砂箱程序运行在操作系统内核的特权上下文&#xff0c;高效&#xff0c;安全&#xff0c;易于扩展而不需要修改内核源码或者加载内核模块。 操作系统一直是实现观测&#xff0c;安全和网络功能的最理想的地方&#xff0c;因为内核的…

Vue基本的内置指令

前言 除了常见的v-bind,v-for,v-if,v-on.v-model等&#xff0c;本次学习一些vue提供的其他内置指令 1 v-text 给标签插入文本&#xff0c;类似于插值语法 它会把全部的字符串当成文本去解析,不会当成标签的,哪怕写的是标签结构 效果和插值语法是一样的 插值语法比v-text更加…

P1037 [NOIP2002 普及组] 产生数

题目描述 给出一个整数 &#xfffd;n 和 &#xfffd;k 个变换规则。 规则&#xff1a; 一位数可变换成另一个一位数。规则的右部不能为零。 例如&#xff1a;&#xfffd;234,&#xfffd;2n234,k2。有以下两个规则&#xff1a; 2⟶52⟶5。3⟶63⟶6。 上面的整数 23423…

SpringBoot的配置和日志

1.配置文件的作用和意义 配置文件中配置整个项目中所有重要的数据&#xff0c;比如&#xff1a; 1.数据库的连接信息&#xff08;包含用户名和密码的设置&#xff09;&#xff1b; 2.项目的启动端口&#xff1b; 3.第三方系统的调用秘钥等信息&#xff1b; 4.用于发现和定位问…

docker--harbor私有仓库部署与管理

目录 第一章.搭建本地私有仓库 1.1.下载 registry 镜像 1.2.运行 registry 容器 1.3.Docker容器的重启策略如下&#xff1a; 1.4.简单操作 第二章. Harbor 简介 2.1.什么是Harbor 2.2.Harbor的特性 2.3.Harbor的构成 第三章.部署服务 3.1.环境部署 3.2.部署 Docker…

USART串口协议和USART串口外设(USART串口发送串口发送和接收)

1、通信接口 • 通信的目的&#xff1a;将一个设备的数据传送到另一个设备&#xff0c;扩展硬件系统 • 通信协议&#xff1a;制定通信的规则&#xff0c;通信双方按照协议规则进行数据收发 异步&#xff1a;需要双方约定一个频率 2、 硬件电路 • 简单双向串口通信有两根通信…

基于springboot和ajax的简单项目 013 ztree插件使用,这是关于修改和新增的

先写写的是menu_list.html文件上的内容。 01.在自动加载函数上写点击事件 $(".input-group-btn").on("click",".btn-delete",doDeleteObject).on("click",".btn-add,.btn-update",doLoadEditUI);02.登录函数&#xff1a; …

30秒预测10天全球天气,上海人工智能实验室发布气象大模型“风乌”效果超DeepMind

4月7日&#xff0c;上海人工智能实验室联合中国科学技术大学、上海交通大学、南京信息工程大学、中国科学院大气物理研究所及上海中心气象台发布全球中期天气预报大模型“风乌”。基于多模态和多任务深度学习方法构建&#xff0c;AI大模型“风乌”首次实现在高分辨率上对核心大…

Speech and Language Processing-导读

朋友们&#xff0c;最近打算做一个大工程&#xff0c;我曾多次提过&#xff0c;chatgpt未来将是一股非常大的信息技术革命&#xff0c;有的人不以为然&#xff0c;或者国内很多企业好像并不是很重视&#xff0c;以我从业多年来的经验&#xff0c;chatgpt与之前的NLP技术有着较为…

【jenkins学习】windows环境下部署与设置中文显示

准备&#xff1a; jenkins安装包&#xff1a; https://www.jenkins.io/zh/download/ Java 17安装包&#xff1a; https://www.oracle.com/java/technologies/downloads/#jdk17-windows 1、jdk安装 不建议放在C盘&#xff0c;自定义一个不含中文的路径&#xff0c;安装即可 配置…

轻松掌握K8S目录持久卷PV/PVC的kubectl操作知识点04

1、介绍 在docker中可以将容器中的目录挂载出来&#xff0c;在k8s中pod可以部署在不同节点&#xff0c;假如该节点的机器宕机了&#xff0c;k8s可能就会将此Pod转移到其他机器&#xff0c;就不是原先的机器了。k8s有自己的一套挂载方案&#xff0c;如下图所示&#xff0c; 原…

Flink通过Maxwell读取mysql的binlog发送到kafka再写入mysql

1.准备环境 JDK1.8 MySQL Zookeeper Kakfa Maxweill IDEA 2.实操 2.1开启mysql的binlog 查看binlog 状态&#xff0c;是否开启 show variables like log_% 如果log_bin显示为ON&#xff0c;则代表已开启。如果是OFF 说明还没开启。 [Linux] 编辑 /etc/my.cnf 文件&…