Linux-Shell编程【看这一篇就够了!!!】

news2024/11/25 20:33:40

目录

前言

什么是Shell编程

Shell脚本的执行方式

脚本格式要求

运行一个Shell

一个Shell例子

Shell的变量

shell变量的定义

设置环境变量

简单示范

位置参数变量

预定义变量

基本语法

运算符

应用案例

条件判断

单流程判断

常用判断条件

应用案例

多流程判断

case语句判断

for循环

while循环

read读取控制台输入

应用实例

函数

系统函数

basename

应用实例

dirname

 应用实例

自定义函数

应用实例

前言

Linux操作系统在虚拟机VM上的安装【CentOS版本】-CSDN博客

Linux-(系统启动、用户管理)-CSDN博客

Linux-实用指令-CSDN博客

Linux-【组管理、权限管理、定时任务调度】-CSDN博客

Linux-进程管理【重点】-CSDN博客

Linux-RPM与YUM-CSDN博客

什么是Shell编程

Shell是一个命令行解释器,它为用户提供了一个向Linux内核直接发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。

Shell脚本的执行方式

脚本格式要求

  • 脚本以“#!/bin/bash”开头
  • 脚本需要有可执行权限
  • Shell脚本文件的后缀名以“.sh”结束

运行一个Shell

运行shell脚本有两种方式:

  • 输入脚本的绝对路径或相对路径来执行(需要有文件的写权限):例如:./hello.sh /root/hello.sh
  • sh + 脚本(不需要有脚本写权限):如:sh hello.sh

一个Shell例子

  • 创建一个名为“hello.sh”脚本文件
  • 运行脚本后输出“hello world

Shell的变量

  • Linux shell中的变量分为:“系统变量”和“用户自定义变量
  • 系统变量:$HOME、$PWD等等
  • 显示当前shell所有的变量:set

shell变量的定义

基本语法:

  • 在shell中使用“#”注释
  • 使用shell变量,在前面加上“$”符号
  • 定义变量:变量名 = 值
  • 撤销变量:unset 变量
  • 声明静态变量:readonly 变量(静态变量不能使用unset撤销)

注意:

  • shell变量定义时,“=”左右两边不能有空格,即“A=2”是正确的,“A = 2”是错误的
#!/bin/bash
#定义变量A
A=100
echo A = $A
echo "A = $A"
#撤销变量A
unset A
echo "A = $A"
#定义静态变量B,不能unset
readonly B=2
echo "B = $B"
unset B

执行效果:

将命令的返回值赋给变量:

  • A=`date`(反引号),运行里面的指令,并把结果返回给变量A
  • A=$(date),等价于反引号
#!/bin/bash
#将当前日期赋值给A
A=`date`
#将一句话赋值给B
B=$(echo "123")
#输出A和B
echo "这是A:$A"
echo "这是B:$B"

效果:

设置环境变量

基本语法:

  • export 变量名=变量值(将shell变量输出为环境变量/全局变量)
  • source 配置文件(让修改后的配置立即生效)

简单示范

  • 在/ect/profile文件中定义TOMCAT_HOME环境变量(找个空白处写上即可)
  • 查看环境变量TOMCAT_HOME的值
  • 输入TOMCAT_HOME变量(在使用前,需要使用source /etc/profile让其生效)

 

位置参数变量

当执行一个shell脚本时,如果希望收到命令行的参数信息,就可以使用位置参数变量

如:./mysehll.sh 100 200,这执行一个shell命令行,也可以在myshell脚本中获取到参数信息

基本语法:

  • $n:n为数字,$0表示命令本身,$1-$9表示第一到第九个参数,10以上的参数需要使用大括号包含:${10}
  • $*:代表命令行中所有参数
  • $@:代表命令行中所有的参数,不过$@把每个参数区分对待
  • $#:代表命令行中所有参数的个数
#!/bin/bash
echo "0=$0 1=$1 2=$2"
echo "所有的参数=$*"
echo "$@"
echo "参数个数=$#"

效果:

预定义变量

shell设计者事先已经定义好的变量,可以直接在shell脚本中使用

基本语法

  • $$:当期那进程的进程号
  • $!:后台运行的最后一个进程的进程号PID
  • $?:最后一次执行的命令的返回状态,如果这个变量的值为0,证明上一个命令正确执行。如果这个变量的值非0,证明上一个命令执行不正确

运算符

基本语法:

  • “$((运算式))”或“$[运算符]”或“expr m + n”
  • 注意expr运算符之间要有空格
  • *、/、%:乘、除、取余

应用案例

  • 计算(2+3)*4的值
#!/bin/bash
#计算(2+3)*4的值
#第一种方式
RES1=$(((2+3)*4))
echo "RES1 = $RES1"
#第二种方式[推荐使用]
RES2=$[(2+3)*4]
echo "RES2 = $RES2"
#第三种方式
TEMP=`expr 2 + 3`
RES4=`expr $TEMP \* 4`
echo "RES4 = $RES4"

条件判断

单流程判断

基本语法:

if [ condition ](注意condition的前后要有空格)

then [condition]

fi

常用判断条件

  • =:字符串比较
  • -lt:小于
  • -le:小于等于
  • -eq:等于
  • -gt:大于
  • -ge:大于等于
  • -ne:不等于
  • -r:对文件有读权限
  • -w:对文件有写权限
  • -x:对文件有执行的权限
  • -f:文件存在并且是一个常规文件
  • -e:文件存在
  • -d:文件存在并且是一个目录

应用案例

  • “ok”是否等于“ok”,使用“=”
  • 23是否大于22,使用“-ge”
  • /root/test.sh文件是否存在,使用“-f”或“-e”
#!/bin/bash
#"ok是否等于"ok"
if [ "ok" = "ok" ]
then
        echo "相等"
fi

#23是否大于22
if [ 23 -ge 22 ]
then
        echo "大于"
fi

#/root/test.sh文件是否存在
if [ -f /root/test.sh ]
then
        echo "存在"
fi

多流程判断

if [ condition ](注意condition的前后要有空格)

then [condition]

elif [ condition ]

then [condition]

fi

case语句判断

基本语法:

case $变量名 in

"值1")

condition

;;

"值2")

;;

esac

for循环

语法1:

for 变量 in 值1 值2 值3...

do

程序/代码

done

语法2:

for(( 初始值; 循环控制条件; 变量变化 ))

do

程序/代码

done

#!/bin/bash
for i in "$@"
do
        echo "num is $i"
done
for((i=0;i<=$1;i++))
do
        echo "i=$i"
done

while循环

基本语法1:

while [ 条件判断式 ]

do

程序/代码

done

#!/bin/bash
SUM=0
i=0
while [ $i -le $1 ]
do
        SUM=$[$SUM+$i]
        i=$[$i+1]
done
echo "最后结果SUM=$SUM"

read读取控制台输入

基本语法:

read(选项)(参数)

选项:

-p:指定读取值的提示符

-t:指定读取值时等待的时间(秒),如果没有在指定时间内输入,就不再等待

应用实例

  • 读取控制台输入一个NUM1值
  • 读取控制台输入一个NUM2值,在10秒内输入
#!/bin/bash
read -p "请输入一个数NUM1=" NUM1
echo "你输入的NUM1=$NUM1"
read -t 10 -p "请输入一个树NUM2,在10秒内输入" NUM2
echo "你输入的NUM2=$NUM2"

 

函数

shell编程和编程语言一样,有系统函数,也可以自定义函数。

系统函数

basename

功能:

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

语法:

basename [pathname] [suffix]

选项:

suffix为后缀,如果suffix被指定,basename会将pathname中的suffix去掉

应用实例

  • 返回 /home/aaa/test.txt的“test.txt”部分:

dirname

功能:

返回完整路径最后“/”的全面的部分,常用于返回路径部分

语法:

dirname 文件绝对路径

 应用实例

  • 返回/home/aaa/test.txt的“/home/aaa”部分

自定义函数

基本语法:

[ function ] function_name [()]

{

        action;

        [return int;]

}

调用直接写函数名:“function_name [值]

应用实例

  • 计算输入两个参数的和,getSum
#!/bin/bash
#自定义函数getSum
function getSum()
{
        SUM=$[$n1+$n2]
        echo "和是=$SUM"
}
#输入两个值
read -p "输入一个数n1=" n1
read -p "输入一个数n2=" n2
#调用自定义函数getSum
getSum $n1 $n2

效果:

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

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

相关文章

Type-C 接口 取电 PD快充协议取电电压5V、9V、15V、20V

随着Type-C接口的普及&#xff0c;快充技术融入进了各种电子设备中&#xff0c;然而快充技术里快充协议是必不可少的&#xff0c;目前市面上已经出现多种快充协议&#xff0c;最常见的便是Type-C PD协议&#xff0c;下面来以起了解以下PD协议。 PD协议的工作原理主要是基于电压…

【OpenCV】灰度化和二值化处理图像

文章目录 1. 图像灰度化处理对比2. 代码示例3. 二值化处理 1. 图像灰度化处理对比 2. 代码示例 #include <opencv2/opencv.hpp> using namespace cv;int main() {Mat currentImage imread("path_to_image.jpg"); // 读取彩色图像Mat grayImage;// 将彩色图像…

负债不再是障碍?银行信贷“白名单“揭秘

谈及银行信贷产品&#xff0c;常闻有言称存在无需考量负债与查询记录之奇品&#xff0c;此等说法十有八九为中介诱人上钩之辞。轻信之下&#xff0c;恐将步入连环陷阱。除非个人资质出类拔萃&#xff0c;如就职于国央企或事业单位&#xff0c;工龄逾年&#xff0c;五险一金完备…

计算机毕业设计选题推荐-土地承包管理系统-Java/Python项目实战(亮点:数据可视化分析、账号锁定、智能推荐)

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

Address localhost:1099 is already in use:tomcat频繁重启端口占用问题

错误提示 Unable to open debugger port (127.0.0.1:58198): java.net.SocketException "Socket closed" Address localhost:1099 is already in use 端口被占用 报错原因 由于短时间内频繁运行tomcat服务器。 为了避免出现这一错误。可以点击刷新uodate resourc…

寻找客户资源的软件

如果你正在寻找能够帮助你高效寻找客户资源的软件&#xff0c;以下几款工具可以为你提供支持&#xff1a; 1. 微拓客APP 微拓客APP是一款专为企业和销售人员设计的智能拓客工具。它通过最新的全国工商数据&#xff0c;帮助你精准搜索目标客户&#xff0c;特别适合需要快速找到…

软件开发人员从0到1实现物联网项目:项目架构的思考

文章目录 前言单体应用足矣摒弃传统的微信对接后期的维护投入上真正的“云”&#xff1a;云托管0服务器免运维免费的CDN和DDoS防护 技术架构小结 前言 因为种种原因&#xff0c;《软件开发人员从0到1实现物联网项目》这个项目的进度停滞了将近一个月。 鉴于该项目的前期开发和…

优化销售流程,领先市场趋势!企元数智赠送小程序合规分销系统!

在当今竞争激烈的商业环境中&#xff0c;企业要保持竞争力并领先市场趋势&#xff0c;关键在于不断优化销售流程和采用最新的营销工具。为满这一迫切需求&#xff0c;企元数智&#xff08;假设为一家虚构公司&#xff09;推出了一项创新举措&#xff1a;赠送小程序合规分销系统…

景联文科技:专业数据标注公司,推动AI技术革新

数据标注作为AI技术发展的重要支撑&#xff0c;对于训练高质量的机器学习模型以及推动应用领域的创新具有不可替代的作用。 景联文科技作为专业的数据标注公司&#xff0c;致力于提供专业的数据标注服务&#xff0c;帮助客户解决AI链条中的数据处理难题&#xff0c;共同推动人工…

沃尔玛活跃卖家一年内增长50%,突破15万!沃尔玛新店铺如何快速出单?

随着美国电商市场竞争日益激烈&#xff0c;沃尔玛正在迅速崛起成为亚马逊的强劲对手。据最新财报显示&#xff0c;2024年第二季度&#xff0c;沃尔玛的全球广告收入增长了26%&#xff0c;其中专注于美国市场的Walmart Connect更是取得30%的增长&#xff0c;这一成绩已经超越了其…

Java笔试面试题AI答之单元测试JUnit(4)

文章目录 19. 简述JUnit org.junit.TestSuite类的作用 &#xff1f;1. 组织测试类2. 简化测试执行3. 灵活配置测试环境4. 嵌套测试套件注意事项 20. 在JUnit中Test注释的作用和用法 &#xff1f;作用用法 21. 简述Junit 基础注解&#xff08;BeforeClass、Before、Test、After、…

Java--集合进阶 Collection,迭代器,lambda表达式

集合体系结构 Collection&#xff1a;单列集合 LIst系列集合&#xff1a;添加的元素是有序、可重复、有索引 Set系列集合&#xff1a;添加的元素是无序、不重复、无索引 Collection集合常用方法 | 方法名 | 说明 || :---…

双设备同时快充不再是梦:揭秘一拖二快充线PD芯片的奥秘

一拖二快充线PD芯片&#xff1a;充电新纪元&#xff0c;让生活更“电”力十足&#xff01; 在这个快节奏的时代&#xff0c;手机、平板、耳机……我们的数字小伙伴们几乎从不离身&#xff0c;但它们的电量却总爱跟我们玩“躲猫猫”。每当夜幕降临&#xff0c;充电线就成了连接我…

【每日刷题】Day114

【每日刷题】Day114 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. LCR 166. 珠宝的最高价值 - 力扣&#xff08;LeetCode&#xff09; 2. 931. 下降路径最小和 - 力扣…

关于转行网络安全的一些建议

在当前就业形势下&#xff0c;不少朋友面临转行的困境。网络安全作为一个热门领域&#xff0c;自然也吸引了许多人的目光。本文将就转行网络安全这一话题&#xff0c;提供一些切实可行的建议。 网络安全行业概况 网络安全涵盖了从基础的脚本编写到高级的漏洞研究等多个层面。该…

【数学分析笔记】第3章第2节 连续函数(2)

3. 函数极限与连续函数 3.2 连续函数 【例3,2,4】证明 f ( x ) a x ( a > 0 , a ≠ 1 ) f(x)a^{x}(a>0,a\ne 1) f(x)ax(a>0,a1)在 ( − ∞ , ∞ ) (-\infty,\infty) (−∞,∞)上连续。 【证】 ∀ x 0 ∈ ( − ∞ , ∞ ) \forall x_{0}\in(-\infty,\infty) ∀x0…

2、PF-Net点云补全

2、PF-Net 点云补全 PF-Net论文链接&#xff1a;PF-Net PF-Net &#xff08;Point Fractal Network for 3D Point Cloud Completion&#xff09;是一种专门为三维点云补全设计的深度学习模型。 点云补全实际上和图片补全是一个逻辑&#xff0c;都是采用GAN模型的思想来进行补全…

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候&#xff0c;不知道如何选的好&#xff0c;本文针对常用的方案&#xff0c;做个大概的说明&#xff1a; 1. 使用VLC for Android VLC Media Player&#xff08;VLC多媒体播放器&#xff09;&#xff0c;最初命名…

【深度学习】LSTM模型,GRU模型计算公式及其优缺点介绍

一.LSTM介绍 LSTM&#xff08;Long Short-Term Memory&#xff09;也称长短时记忆结构, 它是传统RNN的变体, 与经典RNN相比能够有效捕捉长序列之间的语义关联, 缓解梯度消失或爆炸现象. 同时LSTM的结构更复杂, 它的核心结构可以分为四个部分去解析: 遗忘门输入门细胞状态输出…

基于SpringBoot的智能制造云平台系统的设计与实现计算机毕设

一、选题背景与意义&#xff08;300字左右&#xff09; 根据工业4.0智能制造生态链中云工厂在实际生产当中的工作流程进行充分调研和整理出来的&#xff0c;描述最终用户在本系统中对于生产订单的处理、排产、以及生产的完整在线处理流程和业务需求的文档。 针对制造业而言&a…