Linux之shell编程

(超详细)Linux Shell 编程 Linuxshell编程 Shell是一个命令解释器,它的作用是解释执行用户输入的命令及程序等。 用户每输入一条命令,Shell就执行一条。这种从键盘输入命令,就可以立即得到回应的对话方式,称为交互的方式。.................................... 阅读详情

😃Linux 之shell编程

1. 什么是shell?

shell是一个命令行解释器,相当于是 **翻译、解释**Linux的命令

在这里插入图片描述

2. shell脚本的执行

脚本必须以下面开头:

#!/bin/bash
  • 第一种执行:
./test.sh

或者直接绝对路径打开

/home/test.sh

⭐️但是在这之前,必须先打开执行权限x

  • 第二种执行方式,无需执行权限x
sh + 脚本
sh /home/test.sh(绝对路径)
sh test.sh (相对路径)

3. shell的变量

3.1 shell变量介绍

  • 系统变量

由计算机自己早已设置好

  • 自定义变量

自己定义的变量

展示当前shell中的所有变量

set

3.2 shell变量的定义

  • 定义变量
变量值=值(不要有空格)
  • 撤销变量
unset 变量
  • 声明静态变量(全局变量)
readonly 变量名

注意:不能unset

  • 具体规则

在这里插入图片描述
在这里插入图片描述

  • 将命令的返回值赋值给变量
A=`date`

运行里面的命令,将结果的返回值返回给变量A

A=$(date)

4. 设置环境变量

在这里插入图片描述

5. 位置参数变量

想要获得命令行的参数信息,就可以用到位置参数变量

$n:n为数字,$0代表命令本身,$1 -$9带表第一到第九个参数
$*:代表命令行中的所有参数,把所有参数看作一个整体
$@:代表命令行中的所有参数,把每个参数区别对待
$#:代表命令行中所有参数的个数

sh /home/myshell.sh 100 200

100 200相当于是两个形参,往这个命令行(相当于是函数)传入参数,利用上述指令打印输出这些函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6. 预定义变量

预定义变量:类似于内部变量,只能作用于对应脚本

就是shell设计者事先定义好的变量,可以直接在shell脚本中使用
$$:当前进程的进程号(PID)
$!:后台运行的最后一个进程的PID
$?:最后一次执行的命令的返回状态,这个变量值为0,证明上一个命令正确执行;这个变量值非0,不正确执行

7. 运算符

在这里插入图片描述

基本语法

$((运算式))
$[运算式]
expr m + n (中间有空格)
expr m - n
expr \*,/,%  乘,除,取余
如果希望将expr的结果赋给某个变量,使用``(反单引号)

应用实例

计算(2+3)x4的值
请求出命令行的两个参数[整数]的和20 50

在这里插入图片描述
在这里插入图片描述

cat可以看文件里面的内容

#!/bin/bash
#案例1:计算(2+3)x4
# 第一种方式:
ans1=$(((2+3)*4))
echo "ANS1=$ans1"
#第二种方式
ans2=$[(2+3)*4]
echo "ANS2=$ans2"
#第三种方式
ans3=`expr 2 + 3`
ans30=`expr $ans3 \* 4`
echo "ANS3=$ans30"
# 案例2
SUM=$[$1+$2]
echo "sum=$SUM"

8. 条件判断 if语句

  • 基本语法
[ condition ] //注意condition前后要有空格

在这里插入图片描述

非空返回true,空[ ]返回false,空里面也要有空格

#! /bin/bash
if [ "ok"="ok" ]
then
 echo "YES"
fi
#案例2:23 是否大于等于22
#判断语句:使用 -ge
if [ 23 -ge 22 ]
then
   echo "23确实大于等于22"
fi
#案例3:/root/shcode/aaa.txt 目录中的文件是否存在
#判断语句:使用 -f
if [ -f /root/shcode/aaa.txt ]
then
        echo "存在"
fi

9. 流程控制之if

if判断

基本语法:

if [ 条件判断式 ]
then
代码
fi

多分支结构

if [ 条件判断式 ]
then
代码
elif [ 条件判断式 ]
then
代码
fi

案例

# 编写一个shell程序,输入参数大于60,就输出“及格了”,小于60,则输出”不及格“
if [ $1 -ge 60 ]
then
	echo "及格了"
elif [ $1 -lt 60 ]
then
	echo "不及格"
fi

10. 流程控制之case

case语句

  • 基本语法

基本语法非常奇怪,看开一点就可以了

case $变量名 in
"值1")
;;   //两个分号作为第一种情况的结束
"值2")
;;
...省略其他分支...
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac   //用这个符号结束case语句分支

案例

#!/bin/bash
# 案例1:当输入的参数为1时,输出“周一”;当输入的参数为2时,输出“周二”,其他情况就输出“other”
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other"
;;
esac

11. 流程控制之for

基本语法1

for 变量 in 值1 值2 值3...
do
程序/代码
done
案例
#! /bin/bash
# 打印命令行输入的参数
for i in "$*"
do
	echo "The number is $*"
done
echo "-----------第二种方法---------------"
for i in "$@"
do
        echo "The number is $@"
done

echo "-----------第三种方法---------------"
for i in $*
do
        echo "The number is $*"
done

基本语法2

for ((初始值;循环控制条件;变量变化))
do
程序/代码
done
案例
#! /bin/bash
# 打印命令行输入的参数
for i in "$*"
do
        echo "The number is $*"
done
echo "-----------第二种方法---------------"
for i in "$@"
do
        echo "The number is $@"
done

echo "-----------第三种方法---------------"
for i in $*
do
        echo "The number is $*"
done


# 基本语法 2
# 从1 到100的值输出显示
SUM=0
for (( i=1 ;i<=100 ; i++))
do
        SUM=$[$i+$SUM]
done
echo $SUM

# 基本语法 2
# 从1 到100的值输出显示
SUM=0
for (( i=1 ;i<=$1 ; i++))
do
        SUM=$[$i+$SUM]
done
echo $SUM


# 基本语法 2
# 从1 到100的值输出显示
SUM=0
for (( i=1 ;i<=100 ; i++))
do
        SUM=$i+$SUM
done
echo $SUM

12. 流程控制之while

基本语法

while [ 条件判断式 ]
do
程序
done

案例

#!/bin/bash
#案例1:从命令行输入一个数字n,统计从1+...+n的值是多少
SUM=0
i=0
while [ $i -le $1 ]
do
	SUM=$[$SUM+$i]
	#i自增
	i=$[$i+1]
done
echo "执行结果=$SUM"

13. 读取控制台输入之read

有点像C++的cin输入,echo像C++的cout

  • 基本语法:
read(选项)(参数)

-p:指定读取值时的提示符
-t:指定读取值时的等待时间,超过这个等待时间后,如果还是没有输入,直接退出,不再等待
变量:指定读取值的变量名

read -t 10 -p "猜猜我是谁"

注意:选项后面要紧跟相关的参数,-t后面跟时间,-p后面跟提示语句

#!/bin/bash
# 读取控制台输入一个num值
read -p "请输入第一个数字:" NUM1
echo "第一个数字是:$NUM1"
# 读取控制台输入一个num值,在10秒内输入
read -t 10 -p  "请输入第二个数字:" NUM2
echo "第一个数字是:$NUM2"

14. 函数

shell编程中的函数分为两大类,系统函数和自定义函数

系统函数

basename函数

功能:返回完整路径最后/的部分,常用于获取文件名

basename [pathname][suffix]
basename [string][suffix]

会删掉所有文件 绝对路径的前缀包括最后一个’/’

basename /home/cal.sh

返回:

cal.sh

进一步:

basename /home/cal.sh .sh

返回:

cal
dirname 基本语法

功能:返回完整路径最后/的前面部分,返回绝对路径

dirname /home/cal.sh

在这里插入图片描述

应该是用来接收一个变量,然后过滤出文件名与目录

⭐️ 自定义函数

  • 基本语法
[ function ] funname[()]
{
	Action;
	[return int;]
}

调用直接写函数名:

funname [值]
案例
#!/bin/bash
# 案例1:计算输入两个参数的和(动态的获取),getSum

# 定义函数 getSum
function getSum ()
{
	Sum=$[$n1+$n2]
	echo "和=$Sum"
}

# 输入两个值
read -p "请输入一个数n1=" n1
read -p "请输入一个数n2=" n2
#调用自定义函数
getSum $n1 $n2 

先在shell脚本之前写函数的定义,以及形式参数,最后再写函数的调用getSum $n1 $n2 ,同时read相当于cin,往两个形式参数里面去输入;

函数是优先级最低的,整个shell脚本,撇开函数,其他的都是按顺序依次执行,例如:

# 输入两个值
read -p "请输入一个数n1=" n1
read -p "请输入一个数n2=" n2
#调用自定义函数
getSum $n1 $n2

成功结果如下

在这里插入图片描述

换个顺序的话:

#调用自定义函数
getSum $n1 $n2
# 输入两个值
read -p "请输入一个数n1=" n1
read -p "请输入一个数n2=" n2

就会报错:

fun.sh:行7: +: 语法错误: 期待操作数 (错误符号是 "+")

要是以后又不懂了,可以看看这个博客:

关于shell中的自定义函数的一些注意事项

💮完结散花
函数的调用getSum $n1 $n2 ,同时read相当于cin,往两个形式参数里面去输入;

函数是优先级最低的,整个shell脚本,撇开函数,其他的都是按顺序依次执行,例如:

# 输入两个值
read -p "请输入一个数n1=" n1
read -p "请输入一个数n2=" n2
#调用自定义函数
getSum $n1 $n2

成功结果如下
换个顺序的话:

#调用自定义函数
getSum $n1 $n2
# 输入两个值
read -p "请输入一个数n1=" n1
read -p "请输入一个数n2=" n2

就会报错:

fun.sh:行7: +: 语法错误: 期待操作数 (错误符号是 "+")

要是以后又不懂了,可以看看这个博客:

关于shell中的自定义函数的一些注意事项

💮完结散花

Linux Shell编程——从入门到应用 Shell是一个命令解释器,它的作用是解释执行用户输入的命令及程序等,用户每输入一条命令,Shell就解释执行一条。Shell存在于操作系统的最外层,负责与用户直接对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,然后输出到屏幕返回给用户。输入系统用户名和密码并登录到Linux后的所有操作都是由Shell解释与执行的。 阅读详情

相关推荐

LinuxShell编程1———shell基础命令

可以由字母、数字、下划线组成, 不能以数字开头, 不能是关键字,见名知意。变量名=“变量值” 或者 变量名=变量值注意:变量名与变量值等号之间不能有空格,不然就定义失败。调用(提取)变量:$变量名 或${变量名}Shell数组用括号来表示,元素用空格分割开,语法格式:定义数组 :数组名=(值1 值2 ... 值n)$@内置变量,脚本外输的变量值,我们就调用这个函数进行判断。返回值0是服务开启,非0是未开启。修改颜色添加时间sed是一个用于:过滤并转换文本行的流编辑器。

m0_65436732的博客 5846

Linux-Shell编程

文章目录Shell编程1.为什么要学习 Shell 编程2.Shell 是什么3.shell 编程快速入门1.脚本格式要求2.编写第一个 Shell 脚本3.脚本的常用执行方式4.Shell 的变量1.Shell 的变量的介绍2.Shell 变量的定义3.定义变量的规则4.将命令的返回值赋给变量5.设置环境变量1.基本语法2.快速入门6.位置参数变量1.介绍2.基本语法3.实际案例7.预定义变量1.基本介绍2.基本语法3.实际案例8.运算符1.基本介绍2.基本语法3.实际案例9.条件判断1.基本语法2.实际

ginger_mr的博客 3134

Linux Shell编程

​ Shell是一个命令行解释器程序规范,他接受应用程序/用户命令,然后调用操作系统内核完成相关的功能。它是用户使用 Linux 的桥梁。简单来说Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。也可以这样认为,linux中的shell就是linux内核的一个外层保护工具,并负责完成用户与内核之间的交互​ Shell还是一个功能相当强大的编程语言,易编写、易调试、灵活性强。

Casual_Lei的博客 1594

linux中,如何写一个shell脚本

直接赋值跟所有的编程语言一样,变量就是用来赋值的名称。变量赋值跟Java编程语言保持一致变量名=“赋予的值”,为变量赋值时可以使用单引号也可以使用双引号age = "18"⚠️ 变量名和等号之间不能有空格,变量名的命名需要遵守以下规则变量名可包含字母、数字、下划线_数字不能作为变量名的开头不能包含特殊字符(?!@ & *……)不能使用shell关键字(if、then、while、else、for……)作为变量名避免造成不必要的误会用全大写字母表示常量。

achaoyang的博客 5906

An AI compute of cities based on Distributed-Platform and Distributed-Databases(天池地铁流量预测)

摘要 在日益城市化的今天,城市居民出行问题逐渐成为衡量一个城市现代化能力的标准;城市出行方式多元化的同时,也对各交通系统的调度运营能力提出了更高的要求:如何提高运营效率,如何运用有限的安保力量进行有效的安检部署等问题一直在阻挠着城市交通的发展。 An AI compute of cities based on Distributed-Platform and Distributed-Databas...

Clearlove灬Star 5164

CESM笔记——CESM1.0-CESM1.2.2-CESM2.1.3三个版本模式工作流对比

最近测试了CESM1.0,CESM1.2.2和CESM2.1.3三个版本,不同版本在workflow上有一些区别,来做点笔记。 CESM1.0 测试compset:B_2000,F_2000 workflow: 1. create_newcase -case ~/CESM/cesm1_0/script/B_2000 -compset B_2000 -res f19_g16 -mach tianhe 2. cd B_2000 (optional) env_mach_pes.xml ##修改核数,

砍柴姑娘Jourosy的博客 4946

Linux系统的Shell编程

一. 什么是Shell 1. 在学习Shell编程之前,我们应该要先知道什么是Shell 用户、Shell、Linux内核、硬件的关系如下图: Shell是一个应用程序,也可以说是一个命令解释器,它是用户和Linux内核之间的桥梁,可以将用户在图形界面上的操作或在终端输入的命令传递给Linux内核,然后Linux内核再调度各个硬件及其他资源来完成用户的操作。 什么是Linux的内核?在Linux操作系统中,真正能够操作计算机硬件完...

weixin_55118477的博客 3239

详解电路设计中的RC电路

​ 一、什么是RC电路 RC电路是指由电阻R和电容C组成的电路,它是脉冲产生和整形电路中常用到 的电路。 常见的RC充、放电电路、RC积分电路合RC微分电路接下来详细讲解。 二、RC充、放电电路 RC充、放电电路如下图所示,下面通过充电和放电两个过程来分析此电路。 ​RC充、放电电路图 (1)RC充电电路 RC充电电路图如下图(a)所示 RC充电电路图及充电曲线图 ​由上图分析: 将上图a中开关S置于“1”处,电源E开始通过电阻R对电容C充电,由于刚开始充电时电容两端没有..

IT xiaobai 4万+

Linux 下shell编程

什么是shell?Shell是一个命令解析器,是介于Linux操作系统的内核(kernel)与用户之间的一个绝缘层。shell脚本就是讲各类命令预先放入其中,方便一次性执行的一个程序文件,主要用于方便管理员进行设置或者管理。    序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用 She

知秋一叶 5106

VisionMaster字符检测避坑指南:为什么你的缺陷检测总误判?7个参数陷阱详解

本文深入剖析了海康VisionMaster在字符缺陷检测中导致误判的7个关键参数陷阱,包括二值化参数、最小字符面积与宽度、字符极性及缺陷判决参数等。通过药品喷码和PCB丝印等实战案例,提供了系统的调试心法与工作流,帮助工程师精准调参,有效降低误判率,提升检测稳定性。

rust6ferris的博客 1101

Windows Server下OnlyOffice Workspace社区版安装避坑指南(含局域网邮箱配置)

本文详细介绍了在Windows Server环境下部署OnlyOffice Workspace社区版的完整流程,特别针对企业内网环境中的邮箱配置和端口冲突等常见问题提供了实用解决方案。通过硬件资源配置建议、软件环境检查清单以及内网邮箱系统搭建方案对比,帮助用户高效搭建企业级协作平台,实现团队协作的无缝对接。

weixin_29231263的博客 451

Linux shell编程

我们用的是:bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash。[注]:Bash (the Bourne-Agian shell)由 Brian Fox 为GNU项目编写,目的是代替sh。

2401_84382970的博客 1194

资金穿透分析

我们把准备好的银行数据导入到软件中,导入具体步骤这里不做详解,大家可以通过“清林情报分析师”公众号,查看操作视频第二节

清林情报分析师 3493

Linux的Shell编程

Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理。对于JavaEE和Python程序员来说,工作的需要。Boss会要求你编写一些Shell脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。对于大数据程序员来说,需要编写Shell程序来管理集群。Linux Shell中的变量分为:系统变量和用户自定义变量。系统变量:$HOME、$PWD、$SHELL、$USER等等,比如:echo $HOME显示当前shell中所有变量:set定义变量 : 变量=值。

m0_75260099的博客 3381

PCIE总线及其PCIE SWITCH的使用

PCIe总线与PCI最大的区别在工作原理上,PCIe是采用点到点的串行方式进行传输的,被称为“串行PCI”,由于采用了串行方式传输使得其工作频率可以达到2.5Ghz,大大增加了传输速率,同时采用全双工的通信方式,使得其传输速度提高了一倍,每一个PCIe总线设备与外部通信时有四根数据总线,分别有两个RX和TX,两根用于发送,两根由于接收。PCIe switch中文翻译为PCIe开关或PCIe交换机,主要作用将PCIe设备互联,PCIe switch芯片与其设备的通信协议都是PCIe;

zxm8513优快云博客 4736

基于STM32设计的环境监测系统(华为云IOT)_300

随着空气污染问题日益严峻,环境空气质量的监测变得愈加重要。为了解决这一问题,本项目设计并实现了一款基于STM32的空气质量监测设备,能够实时监测空气中的温湿度、二氧化碳浓度和甲醛浓度,并通过OLED显示屏展示数据。此外,设备支持通过WIFI模块将数据上传至云端,用户可以通过手机APP或Windows上位机查看实时数据。设备采用MQTT协议与华为云IOT物联网服务器进行数据通信,确保数据的实时性和可靠性。本项目还结合了低功耗设计和高灵敏度传感器,使得设备能够高效稳定地运行,并实现远程监控功能。

697

linux shell编程总结

    本周学习了unix/linux shell编程,参考的是《LINUX与UNIX Shell 编程指南》,David Tansley著;徐焱,张春萌等译,由机械工业出版社出版的了,往内页那么一翻,都是2000年3月译的了,原书估计会更老,不过图书馆能找到合适于我这种初学者的也许就这么本了,将就着的吧。    这本书是以Bourne shell这个UNIX系统都支持的标准shell。Bou

ltbook的专栏 4557

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Linux Shell 编程

Shell 是Linux 内核与用户之间的交互接口,它接收用户输入的命令,解析后传递给内核执行,并将结果返回给用户。简单来说,Shell 是 “命令解释器”,也是一种编程语言(解释型语言,无需编译)。变量名由字母、数字、下划线组成,不能以数字开头。赋值时等号两侧不能有空格(如a=10正确,a = 10错误)。变量值含空格或特殊字符(如)时,需用双引号(")或单引号(')包裹。变量含义示例场景$0当前脚本的文件名echo $0$n脚本的第 n 个参数(n≥1,$1是第一个参数)执行。

zcz1607127821的博客 1149

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Linux——Shell编程

Shell是一种命令语言和程序设计语言,它既是用户与Linux系统交互的桥梁,也支持变量定义、流程控制等编程特性。本文详细介绍了Shell基础语法,包括变量定义与使用、参数传递、字符串操作、数组、运算符、输入输出命令(echo/printf/read)以及test条件测试。重点讲解了Shell流程控制语句(if/for/while/case等)和函数定义方法,并深入解析输入输出重定向机制,涵盖标准输出/错误重定向、文件描述符合并及/dev/null的特殊用途。通过丰富的代码示例,系统性地展示了Shell脚本

2501_91237346的博客 1011

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

技术干货:Linux Shell 编程基础,看这一篇就够了!

技术干货:Linux Shell 编程基础,看这一篇就够了!

cdeveloper 的专栏 4万+

linux学习,shell编程

本文分享了Linux中的一些基本操作

qq_61272601的博客 940

Linux软件编程:shell

4.3 []:(ls file_[1-5].txt或者ls file_[^3].txt或者ls file_[1,3,5].txt)匹配一位长度、指定字符的文件名。3.2输出(echo $filename):将变量filename中的内容打印在屏幕上。4.2双引号(echo"$filename"):将里面的变量换成对应的值打印。1.基本shell命令:ls、cd、touch、rm、mkdir、rmdir、cp、mv。4.1 *:(ls file*.txt)匹配任意长度、任意字符的文件名。

2501_91498265的博客 1267

Linux之Shell编程

Linux之Shell编程 1.1.Shell概述 Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。 Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。 用户<—>Shell&lt...

鬼谷子的博客 299

【Linux】Shell编程【一】

Shell编程(一),关于Shell变量、运算符等

低调做人,低调编码,神码都是浮云 2311

Linux下的shell语言编程入门

Linux下的shell语言编程入门2006年12月15日 星期五 上午 02:32 通常情况下,我们从命令行输入命令每输入一次就能够得到系统的一次响应。一旦需要我们一个接着一个的输入命令而最后才得到结果的时候,这样的做法显然就没有效率。要达到这样的目的,通常我们利用shell程序或者shell脚本来实现

首席技术执行官CTO(Chief Technology Officer)|技术总监--邓斌博客 5401
上一篇: Linux学习笔记(1)【持续更新】
下一篇: Ubuntu下vim编辑器无法正常输入相应符号
CodingZP
博客等级 码龄4年 75粉丝 9原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值