Shell脚本常见用法列举

news2024/9/28 17:29:44

前言

最近在复习shell脚本的相关知识,本文列举了一些在shell脚本中用得到的一些基础语法。

1:打印常见内部变量和环境变量值

shell中常用变量介绍

$0脚本名
$n第n个参数,n=1,2,3...
$*所有参数列表(视为一个整体,不包括脚本名)
$@所有参数列表(独立字符串、不包括脚本名)
$#参数个数(不包含脚本名)
$$当前进程PID
$!后台运行的最后一个进程PID
$?执行上一个指令的返回值,如果为0,证明上一个命令正确执行
#1:打印一些变量
echo $#
echo $0
echo $1
echo $$
echo $?
echo $!
echo "hello world"
echo $HOME
echo $PWD

 2:$@和$*之间的区别

#2:比较$@和$*
echo $@
echo $*
for var in "$@"
do 
	echo $var
done

for val in "$*"
do
	echo $val
done

可以看到$@和$*不加“”括起来是没有区别的,当用“”括起来之后,$@会将参数独立看待,而$*会将全部参数视为一个整体。

3:自定义变量,将命令执行的结果返回给变量

在自定义一个变量的时候“=”两端不要加空格,可以将shell指令的返回值传给变量

#3:自定义变量,定义的时候不要加空格,将命令的结果返回给变量
A=100
echo "A = $A"
B=$(pwd)
echo $B

4:运算符,实现加减乘除简单算数操作

将表达式用[]括起来后里面的语句和正常的加减乘除操作相同

#4:运算符,实现加减乘除操作
SARFF=$[1200+4]
echo $SARFF
echo $[$1*$2]

5:if条件判断,字符串(=),数值比较(-lt -gt -le -ge -eq -ne),文件权限(-r -w -x ),文件、目录是否存在,是否为一个普通文件( -f -d -e)

shell脚本目录下的文件和目录

注意if语句的中括号两端要有空格 ,否则会报错

#5:条件判断
if [ "ok100" = "ok" ]
then 
	echo "equal"
fi

if [ 30 -gt 20 ]
then
	echo "greater than"
fi

if [ -r $0 ]
then 
	echo "$0 can read"
fi

if [ -w $0 ]
then 
	echo "$0 can write"
fi

if [ -x $0 ]
then 
	echo "$0 can execute"
fi

if [ -e 1.txt ]
then 
	echo "1.txt exists"
fi

if [ -d dir ]
then 
	echo "dir exists"
fi

if [ -f 1.txt ]
then 
	echo "1.txt is a normal file"
fi

6:流程控制

实现C语言中的if else 语句

#6:流程控制
if [ $1 -gt 60 ]
then 
	echo "$1 greater than 60"
elif [ $1 -le 60 ]
then
	echo "$1 little equal 60"
fi

7:循环语句(for和while)

for循环和while循环都是实现1加到100的和

#7:for循环
SUM=0
for((i=1;i<=100;i++))
do
	SUM=$[$SUM+$i]
done
echo "SUM = $SUM"

#while循环
j=0
NUM=0
while [ $j -le 100 ]
do
	NUM=$[$NUM+$j]
	j=$[$j+1]
done
echo "NUM = $NUM"

 

8:从控制台输入数据,C语言中scanf函数功能

使用read来实现输入功能,-p后的内容是提示信息,-t可以限制输入参数的时间

#8:从控制台获取参数,实现scanf作用
read -t 5 -p "input a num" NUM2
echo "you input NUM2 = $NUM2"

在限制时间5s中之内输入数据 

超过5s还未输入数据

9:函数的简单使用

#9:自定义函数
function getAdd(){
 	SUM=$[$n1+$n2]
 	echo "SUM = $SUM"
}

read -p "input first num" n1
read -p "input second num" n2

getAdd $n1 $n2

定义函数要用function关键字,函数功能是实现求两数的和

总结

本文只涉及了shell脚本的一小部分内容,目的是为了能够使用shell脚本实现一些简单的功能。

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

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

相关文章

chatgpt赋能Python-python3人脸识别

人脸识别的python3应用&#xff1a;一步步实现高精度的面部识别 Python3作为一种高效的编程语言&#xff0c;具有广泛的应用场景。近年来&#xff0c;人脸识别技术在安防、金融、医疗等领域中逐渐普及&#xff0c;运用Python3进行人脸识别具有巨大的潜力。本文将介绍如何使用P…

React学习笔记四-state

此文章是本人在学习React的时候&#xff0c;写下的学习笔记&#xff0c;在此纪录和分享。此为第四篇&#xff0c;主要介绍react中的state。 1.state&#xff08;状态&#xff09; 1.1state简介 存在state(状态)的组件称为复杂组件&#xff0c;反之称为简单组件。 何为状态呢…

TCL表达式

目录 操作数 运算符和优先级 数学函数 操作数 TCL 表达式的操作数通常是整数或实数。整数一般是十进制的&#xff0c; 但如果整数的第一个字符是 0(zero)&#xff0c;那么 TCL 将把这个整数看作八进制的&#xff0c;如果前两个字符是 0x 则这个整数被看作是十 六进制的。TC…

I2C项目问题总结

1、项目里面用到哪些接口&#xff1f;都是怎么用的&#xff1f; 项目里面用到了rkv_i2c_if、lvc_i2c_if、lvc_apb_if。rkv_i2c_if用来将DUT内部的intr中断信号、debug信号、ic_en使能信号、i2c和apb的时钟复位信号引出&#xff0c;在接口中声明了一个大位宽信号用来表示intr中…

分布式消息中间件RocketMQ的工作原理

RocketMQ 工作原理 消息的生产 消息的生产过程 ​ Producer可以将消息写入到某Broker中的某Queue中&#xff0c;其经历了如下过程&#xff1a; Producer发送消息之前&#xff0c;会先向NameServer发出获取消息Topic的路由信息的请求NameServer返回该Topic的路由表及Broker列…

kubernetes yaml文件|--dry-run导出yaml文件

kubernetes yaml文件|--dry-run导出yaml文件 YAML 语法格式&#xff1a;二 查看 api 资源版本标签三 写一个nignx.yaml文件demo四、编写service服务的资源清单详解k8s中的port五 用–dry-run命令生成yaml资源清单六 将现有的资源生成模板导出写yaml太累怎么办&#xff1f; YAML…

关于FLAME和SMPL模型

英文参考文献&#xff1a;https://medium.com/offnote-labs/3d-face-and-body-reconstruction-95f59ada1040 一个训练好的FLAME模型的输入是一个参数向量&#xff0c;包括形状参数、姿势参数和表情参数。这些参数分别控制人脸的身份特征、头部的旋转和平移、面部的表情变化。一…

算法设计与分析:线性规划问题和单纯形算法(作业-必做)(头歌实验)

第1关&#xff1a;单纯性算法解一般线性方程组 任务描述 本关任务&#xff1a;编写一个利用两阶段单纯性算法求一般线性规划的程序。 相关知识 单纯形算法的第1步&#xff1a;选出使目标函数增加的非基本变量作为入基变量。 查看单纯形表的第 1 行&#xff08;也称之为z行…

UnityVR--Managers--对象池1

本篇中使用的API&#xff1a;gameObject.CompareTag("标签")、UnityEvent()事件管理、ObjectPool<GameObject>&#xff08;&#xff09;对象池 参照unity官方教程&#xff1a;Hi ObjectPool 目录 1. 应用场景 2. 对象池的原理 3. 查看资源消耗情况 4. 不使用…

mysql 备库延迟问题

备库延迟原因&#xff1a; log传送开销小&#xff0c;消费relay log 超时 备库性能不如主库 备库承担更多SQL分析 主库是多线程执行&#xff0c;备库是单线程执行解析relay log 处理方法&#xff1a; 主备使用相同的机器 备库关闭log实时落盘 增加从库数量&#xff0c;…

Sentinel-2数据下载及处理

数据下载网站&#xff1a;欧空局官网&#xff08;需注册并登录&#xff09; https://scihub.copernicus.eu/dhus/#/home 哨兵2 L1C数据波段信息 哨兵2 L1C数据时间&#xff1a;2015-06-23至now 由于数据量大&#xff0c;考虑服务器压力&#xff0c;哨兵2号数据直接下载的时间跨…

[web安全原理分析]-XXE漏洞入门

前言 XXE漏洞 XXE漏洞全称(XML External Entity Injection)即xml外部实体注入漏洞&#xff0c;XXE漏洞发生在应用程序解析XML输入时&#xff0c;没有禁止外部实体的加载&#xff0c;导致可加载恶意外部文件&#xff0c;造成文件读取、命令执行、内网端口扫描、攻击内网网站、…

头歌计算机组成原理实验—运算器设计(10) 第10关:补码一位乘法器设计

第10关&#xff1a;补码一位乘法器设计 实验目的 学生掌握补码一位乘法运算的基本原理&#xff0c;熟练掌握 Logisim 寄存器电路的使用&#xff0c;能在 Logisim 平台中设计实现一个8*8 位的补码 Booth一位乘法器。 视频讲解 ####实验内容 在 alu.circ 文件中的补码一位乘法…

Linux基础——权限

1. Linux下的用户 在 Linux 操作系统中&#xff0c;有两种主要类型的用户账户&#xff0c;分别是普通用户账户和超级用户账户&#xff08;也称为 root 用户账户&#xff09;。 普通用户账户&#xff08;user&#xff09;是在 Linux 系统上创建的普通账户&#xff0c;可以用于日…

图片隐写(一)

文件隐藏 binwalk binwalk -e filename foremost foremost filename steghide & stegseek Install sudo apt-get install steghidestegseek Use steghide extract -sf filename -p passwordtime stegseek secret.file aaa.txt dd 文本隐藏 二进制文件末尾 or 文…

ffmpeg rtsp解析

一、 rtsp 协议说明 rtsp的协议层级 rtsp 属于应用层&#xff0c; 使用tcp传输&#xff0c;主要是传递服务器的一些信息&#xff0c;实现流连接。播放 暂停 销毁等控制 rtp 实现音视频数据包的发送&#xff0c;通过RTSP等协议的SDP信息协商好了RTP数据包的发送目的和传输方式…

UNIX网络编程卷一 学习笔记 第十四章 高级I/O函数

有3种方式可在涉及套接字的IO操作上设置超时方法&#xff1a; 1.调用alarm&#xff0c;它在指定超时期满时产生SIGALRM信号。此方法涉及信号处理&#xff0c;而信号处理在不同的实现上存在差异&#xff0c;且此方法可能干扰进程中已经执行过的alarm调用&#xff0c;可能使之前已…

【LLM系列之Tokenizer】如何科学地训练一个LLM分词器

1 背景与基础 1.1 为什么需要分词 对于人而言&#xff0c;在我们学会阅读之前&#xff0c;仍然可以理解语言。比如当你开始上学时&#xff0c;即使你不知道名词和动词之间的区别&#xff0c;但是你已经可以和你的同学交谈了&#xff0c;比如“我喜欢吃香蕉”&#xff0c;孩子…

vmware ubuntu突然无法联网的一种解决方案

记录一下vmware突然无法联网的一种解决方案。此法未必适用所有无法联网情形。Good Luck then. 今天使用vmware的ubuntu 18.04时&#xff0c;突然无法联网。Firefox在访问百度时显示“The proxy server is refusing connections”&#xff0c;随即检查了浏览器的proxy设置&#…

详解Jetpack Compose中的状态管理与使用

前言 引用一段官方描述&#xff0c;如下 由于 Compose 是声明式工具集&#xff0c;因此更新它的唯一方法是通过新参数调用同一可组合项。这些参数是界面状态的表现形式。每当状态更新时&#xff0c;都会发生重组。因此&#xff0c;TextField 不会像在基于 XML 的命令式视图中那…