Linux shell编程入门

Linux-Shell编程详细入门教程 本文《Linux - Shell 编程详细入门教程》旨在为读者提供全面的 Linux Shell 编程指引。文章从基础概念入手,介绍 Shell 的作用及常见的 Shell 类型。详细讲解了 Shell 编程中的变量定义与使用、控制结构(如条件判断、循环)、函数定义及调用等核心内容。通过实际案例展示如何运用 Shell 脚本实现自动化任务,如文件操作、系统管理等。无论是初学者还是有一定基础的开发者,都能从本文中获取实用知识,轻松迈入 Linux Shell 编程的大门。 阅读详情

从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作。在Linux GUI日益完善的今天,在系统管理等领域,Shell编程仍然起着不可忽视的作用。深入地了解和熟练地掌握Shell编程,是每一个Linux用户的必修 功课之一。

Linux的Shell种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、Shell for Root(/sbin/sh),等等。不同的Shell语言的语法有所不同,所以不能交换使用。每种Shell都有其特色之处,基本上,掌握其中任何一种 就足够了。在本文中,我们关注的重点是Bash,也就是Bourne Again Shell,由于易用和免费,Bash在日常工作中被广泛使用;同时,Bash也是大多数Linux系统默认的Shell。在一般情况下,人们并不区分 Bourne Shell和Bourne Again Shell,所以,在下面的文字中,我们可以看到#!/bin/sh,它同样也可以改为#!/bin/bash。

利用vi等文本编辑器编写Shell脚本的格式是固定的,如下:

#!/bin/sh

#comments

Your commands go here

首行中的符号#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程 序。如果首行没有这句话,在执行脚本文件的时候,将会出现错误。后续的部分就是主程序,Shell脚本像高级语言一样,也有变量赋值,也有控制语句。除第 一行外,以#开头的行就是注释行,直到此行的结束。如果一行未完成,可以在行尾加上",这个符号表明下一行与此行会合并为同一行。

编辑完毕,将脚本存盘为filename.sh,文件名后缀sh表明这是一个Bash脚本文件。执行脚本的时候,要先将脚本文件的属性改为可执行的:

chmod +x filename.sh

执行脚本的方法是:

./filename.sh

下面我们从经典的“hello world”入手,看一看最简单的Shell脚本的模样。

#!/bin/sh

#print hello world in the console window

a = "hello world"

echo $a

Shell Script是一种弱类型语言,使用变量的时候无需首先声明其类型。新的变量会在本地数据区分配内存进行存储,这个变量归当前的Shell所有,任何子进 程都不能访问本地变量。这些变量与环境变量不同,环境变量被存储在另一内存区,叫做用户环境区,这块内存中的变量可以被子进程访问。变量赋值的方式是:

variable_name = variable_value

如果对一个已经有值的变量赋值,新值将取代旧值。取值的时候要在变量名前加$,$variable_name可以在引号中使用,这一点和其他高级语言是明显不同的。如果出现混淆的情况,可以使用花括号来区分,例如:

echo "Hi, $as"

就不会输出“Hi, hello worlds”,而是输出“Hi,”。这是因为Shell把$as当成一个变量,而$as未被赋值,其值为空。正确的方法是:

echo "Hi, ${a}s"

单引号中的变量不会进行变量替换操作。

关于变量,还需要知道几个与其相关的Linux命令。

env用于显示用户环境区中的变量及其取值;set用于显示本地数据区和用户环境区中的变量及其取值;unset用于删除指定变量当前的取值,该值将被指定为NULL;export命令用于将本地数据区中的变量转移到用户环境区。

下面我们来看一个更复杂的例子,结合这个例子,我们来讲述Shell Script的语法。

 1 #!/bin/bash
 2 # we have less than 3 arguments. Print
 the help text:
 3 if [ $# -lt 3 ]; then

 4 cat<<HELP
 5      ren -- renames a number of files
 using sed regular expressions
 6 

 7      USAGE: ren 'regexp' 'replacement' files
 8      EXAMPLE: rename all *.HTM files in *.html:
 9      ren 'HTM$' 'html' *.
HTM
10 

11 HELP
12      exit 0

13 fi
14 OLD="$1"

15 NEW="$2"
16 # The shift command removes one argument from the list of
17 # command line arguments.

18 shift
19 shift
20 # $* contains now all the files:
21 for file in $*; do

22 if [ -f "$file" ]; then
23     newfile=`echo "$file" | sed  "s/${OLD}/${NEW}/g"`
24         if [ -f "$newfile" ]; then

25             echo "ERROR: $newfile exists already"
26         else
27             echo "renaming $file to $newfile "
28             mv "$file" "$newfile"
29         fi
30 
fi
31 done

我们从头来看,前面两行上一个例子中已经解释过了,从第三行开始,有新的内容。if语句和其他编程语言相似,都是流程控制语句。它的语法是:

if …; then

…

elif …; then

…

else

…

fi

与其他语言不同,Shell Script中if语句的条件部分要以分号来分隔。第三行中的[]表示条件测试,常用的条件测试有下面几种:

[ -f "$file" ] 判断$file是否是一个文件

[ $a -lt 3 ] 判断$a的值是否小于3,同样-gt和-le分别表示大于或小于等于

[ -x "$file" ] 判断$file是否存在且有可执行权限,同样-r测试文件可读性

[ -n "$a" ] 判断变量$a是否有值,测试空串用-z

[ "$a" = "$b" ] 判断$a和$b的取值是否相等

[ cond1 -a cond2 ] 判断cond1和cond2是否同时成立,-o表示cond1和cond2有一成立

要注意条件测试部分中的空格。在方括号的两侧都有空格,在-f、-lt、=等符号两侧同样也有空格。如果没有这些空格,Shell解释脚本的时候就会出错。

$#表示包括$0在内的命令行参数的个数。在Shell中,脚本名称本身是$0,剩下的依次是$0、$1、$2…、${10}、${11},等等。$*表示整个参数列表,不包括$0,也就是说不包括文件名的参数列表。

现在我们明白第三行的含义是如果脚本文件的参数少于三个,则执行if和fi语句之间 的内容。然后,从第四行到第十一行之间的内容在Shell Script编程中被称为Here文档,Here文档用于将多行文本传递给某一命令。Here文档的格式是以<<开始,后跟一个字符串,在 Here文档结束的时候,这个字符串同样也要出现,表示文档结束。在本例中,Here文档被输出给cat命令,也即将文档内容打印在屏幕上,起到显示帮助 信息的作用。

第十二行的exit是Linux的命令,表示退出当前进程。在Shell脚本中可以使用所有的Linux命令,利用上面的cat和exit,从一方面来说,熟练使用Linux命令也可以大大减少Shell脚本的长度。

十四、十五两句是赋值语句,分别将第一和第二参数赋值给变量OLD和NEW。紧接下来的两句是注释,注释下面的两条shift的作用是将参数列表中的第一个和第二个参数删除,后面的参数依次变为新的第一和第二参数,注意参数列表原本也不包括$0。

然后,自二十一行到三十一行是一个循环语句。Shell Script中的循环有下面几种格式:

while [ cond1 ] && { || } [ cond2 ] …; do

…

done

for var in …; do

…

done

for (( cond1; cond2; cond3 )) do

…

done

until [ cond1 ] && { || } [ cond2 ] …; do

…

done

在上面这些循环中,也可以使用类似C语言中的break和continue语句中断 当前的循环操作。第二十一行的循环是将参数列表中的参数一个一个地放入变量file中。然后进入循环,判断file是否为一个文件,如果是文件的话,则用 sed命令搜索和生成新的文件名。sed基本上可以看成一个查找替换程序,从标准输入,例如管道读入文本,并将结果输出到标准输出,sed使用正则表达式 进行搜索。在第二十三行中,backtick(`)的作用是取出两个backtick之间的命令输出结果,在这里,也就是将结果取出赋给变量 newfile。此后,判断newfile是否已经存在,否则就把file改成newfile。这样我们就明白这个脚本的作用了,Shell Script编写的其他脚本与此相似,只不过是语法和用法稍有不同而已。

通过这个例子我们明白了Shell Script的编写规则,但还有几件事情需要讲述一下。

第一个,除了if语句之外,Shell Script中也有类似C语言中多分支结构的case语句,它的语法是:

case var in

pattern 1 )

… ;;

pattern 2 )

… ;;

*)

… ;;

esac


 

我们再就下面一个例子,看看case语句的用法。

while getopts vc: OPTION

do

case $OPTION in

c) COPIES=$OPTARG

     ehco "$COPIES";;

v) echo "suyang";;

\?) exit 1;;

esac

done

上面的getopts类似于C语言提供的函数getopts,在Shell Script中,getopts经常和while语句联合起来使用。getopts的语法如下:

getopts option_string variable

option_string中包含一串单字符选项,若getopts在命令行参数中 发现了连字符,那么它会将连字符之后的字符与option_string进行比较,若匹配成功,则把变量variable的值设为该选项,若无匹配,则把 变量的值设为?。有时候,选项还会带一个值,例如-c5等,这时要在option_string中该选项字母后面加上一个冒号,getopts发现冒号 后,会读取该值,然后将该值放入特殊变量OPTARG中。这个命令比较复杂,如有需要,读者可以详细参阅Shell编写的相关资料。

上面这个循环的作用就是依次取出脚本名称后面的选项,进行处理,如果输入了非法选项,则进入"?指定的部分,退出脚本程序。

第二个,Bash提供了一种用于交互式应用的扩展select,用户可以从一组不同的值中进行选择。其语法如下:

select var in …; do

break;

done

例如,下面这段程序的输出是:

#!/bin/bash

echo "Your choice?"

select var in "a" "b" "c"; do

break

done

echo $var

----------------------------

Your choice?

1) a

2) b

3) c

第三,Shell Script中也可以使用自定义的函数,其语法形式如下:

functionname()

{

…

}

例如我们可以把上面第二个例子中第四到第十二行放入一个名为help函数体内,以后每次调用的时候直接写help即可。函数中处理函数调用参数的方法是,直接用上面讲过的$1、$2来分别表示第一、第二个参数,用$*表示参数列表。

第四,我们也可以在Shell下调试Shell Script脚本,当然最简单的方法就是用echo输出查看变量取值了。Bash也提供了真正的调试方法,就是执行脚本的时候用-x参数。

sh ?x filename.sh

这会执行脚本并显示脚本中所有变量的取值,也可以使用参数-n,它并不执行脚本,只是返回所有的语法错误。

39、高级Shell脚本编程与Linux编程入门 本文介绍了高级Shell脚本编程与Linux编程的基础知识。内容涵盖使用sed和awk处理文本、Shell脚本的实用技巧,以及Linux环境下使用GCC编译程序、make工具构建项目和gdb调试程序的方法。通过实际案例,如修改员工数据库和计算ISBN-13编号,帮助读者更好地掌握Shell脚本的强大功能。此外,还讲解了Linux编程的基本流程及GNU相关工具的应用,适合初学者入门学习系统编程和自动化处理技能。 阅读详情

相关推荐

PHP实战:5分钟搞定SM4国密加密算法集成(附完整代码)

本文详细介绍了如何在PHP项目中快速集成SM4国密加密算法,提供完整的代码实现和实际应用示例。从算法原理到核心代码解析,再到性能优化与安全实践,帮助开发者高效实现数据加密功能,满足金融、政务等领域的合规需求。

weixin_29315569的博客 354

linux脚本lt和gt语法,shell中’-gt’与’>’的区别

bash中,如果想要比较两个数字的大小,最常用的关系运算符就是 “-gt”或者”-lt”了最简单的示例如下正如上图所示,a=3,b=2,当比较两个变量时,判断变量a的值是否大于变量b的值时,返回值为0,即结果为真,判断变量a的值是否小于变量b的值时,返回值为1,即结果为假(非零值为假)。但是细心如你一定注意到了,在上例中,两个变量的值均为数字,所以我们可以使用关系运算符”-gt”或者”-lt”比较...

weixin_42277672的博客 5854

最新首发——boss直聘爬虫

本文介绍了使用Python开发Boss直聘爬虫的核心思路和技术要点。通过模拟浏览器访问搜索页面获取Cookie,然后构建API请求获取职位数据。关键步骤包括:1)使用DrissionPage库初始化浏览器;2)模拟用户浏览行为获取必要参数;3)设置完整的请求头信息;4)通过POST请求获取JSON格式的职位数据。文章提供了详细的代码实现,包括浏览器模拟、API请求构建、数据处理等核心功能模块,并强调了最新版接口改为POST访问的特点。该爬虫可自动翻页采集数据并保存为Excel文件,适用于安全实习等职位信息的

2301_79735033的博客 3320

shell中 -eq,-ne,-gt,-lt,-ge,-le数字比较符

使用说明: -eq //equals等于 -ne //no equals不等于 -qt //qreater than 大于 -lt //less than小于 -ge //greater equals大于等于 -le //less equals小于等于 注: 1、在shell中进行比较时,结果为0代表真,为1代表假。 2、-eq,-ne等比较符只能用于数字比较,有字符也会先转换成数字然后进行比较。 ...

旭东怪的博客 10万+

PyMuPDF`库实现PDF旋转功能

本文介绍了一个简单的Python应用程序,用于将PDF文件转换为旋转90度的PDF文件。通过使用`wx很抱歉,Markdown格式在当前聊天界面无法显示。我将为您提供纯文本格式的博客内容,您可以将其复制到Markdown编辑器中进行格式化。PDF转换工具本文介绍了一个简单的Python应用程序,用于将PDF文件转换为旋转90度的PDF文件。该工具使用了wxPython和PyMuPDF库。功能该PDF转换工具具有以下功能:1. 选择PDF文件:通过点击“选择文件”按钮,用户可以选择要转换的PDF文件。

Winfredzhang的博客 2735

Halcon-AOI外观缺陷检测系列

Halcon-AOI外观缺陷检测系列

Jumy_S的博客 1667

BASH中set指令的作用

set指令能设置所使用shell的执行方式,可依照不同的需求来做设置  -a  标示已修改的变量,以供输出至环境变量。 -b  使被中止的后台程序立刻回报执行状态。 -C  转向所产生的文件无法覆盖已存在的文件。 -d  Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。 -e  若指令传回值不等于0,则立即退出shell。   -f   取消使用通配符。...

weixin_30411819的博客 292

Java 实现 MP3 音频合并工具类:摆脱 FFmpeg,高效低 CPU 的纯本地方案【需求已解决】

本方案充分发挥了 Java 音频 SPI 的潜力,实现了轻量、跨平台、低 CPU 消耗的 MP3 音频合并工具类。 对于希望在服务器或桌面应用中集成音频处理功能的开发者而言,这无疑是一个可行且优雅的解决方案。

一键难忘的博客 544

shell脚本开发技术笔记4--逻辑判断if

这小节基本是代码和基础概念掺着来,语法这东西多用就行,没困难也没窍门

qq_43387908的博客 764

点云语义分割:PointNet训练S3DIS数据集

文章目录一、数据准备1.1、数据下载二、训练三、测试 项目地址:pointnet 此次我们是用pointnet网络来做语义分割。代码在pointnet项目中的sem_seg文件夹下,里面也有README.md介绍了训练的过程。 一、数据准备 1.1、数据下载 原始数据下载 处理好的h5格式数据下载 二、训练 三、测试 ...

zhaoguanhua的博客 4177

【RT-DETR涨点改进】全网独家首发、特征融合改进篇 | AAAI 2026 | 引入CDEM交叉动态增强模块,双向引导和融合,在低光图像增强中有效提升了图像的亮度,提升小目标和暗目标的检测准确率

本文提出了一种基于CDEM(交叉动态增强模块)改进的rtdetr网络模型,有效提升了在低光和复杂环境下的目标检测性能。CDEM模块通过动态增强亮度与色彩特征,改善图像输入质量,增强细节和对比度。该模块具有轻量级结构,易于集成到现有模型中,能够显著提升小目标和暗目标的检测准确率与鲁棒性。文章详细介绍了CDEM模块的结构原理、实现方法,并提供了完整的代码实现和配置指南,包括三种改进版本的YAML配置文件。实验结果表明,该方法在图像增强和目标检测任务中均取得了优异性能。

Ai缝合怪、助力小伙伴高效发论文 145

linux下写shell脚本时-gt或-lt是什么意思?

这段代码是对现在时间进行判断,如果当前时间在5:00-21:00之间就是白天睡眠1秒,否则就是夜晚睡眠5秒。-ge是大于等于的意思。-le是小于等于的意思。-ne是不等于的意思。-gt是大于的意思。-eq是等于的意思。-lt是小于的意思。

qq_41941900的博客 3494

Vue3 - 解决报错 Uncaught (in promise) DOMException: Failed to execute ‘insertBefore‘ on ‘Node‘: The node

vue3,报错,vue3报错,Uncaught(inpromise)DOMException:Failedtoexecute'insertBefore'on'Node':Thenodebeforewhichthenewnodeistobeinsertedisnotachildofthisnode,如何解决这个错误,动态渲染,v-if,v-show,insertBefore,详细解决方法,vue3未能在“Node”上执行“insertBefore”:要插入

🏆 前端领域优质创作者 1万+

Linux: Shell编程入门

- shell 是 在英语中 壳, 外壳的意思 - 可以把它想象成嵌入在linux这样的操作系统里面的一个微型的编程语言 - 不像C语言, C++ 或 Java 等编程语言那么完整,它可以帮我们完成很多自动化任务 - 例如保存数据监测系统的负载等等,我们同样可以用C语言完成类似的任务 - Shell 相比C语言的优势在于它是完全嵌入在linux中的,不需要安装,不需要编译 - 而且我们不需要学习太多新的东西 - 我们在linux中用的那些命令,都可以用在shell语言中,如:ls, cd, grep

Wang的专栏 1749

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Statistics and Machine Learning Toolbox

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

Linux Shell编程入门指南

Shell是一种命令行解释器,它接收用户输入的命令并将其传递给操作系统执行。Linux系统提供了多种Shell,其中最常用的是Bash(Bourne Again SHell)。Bash不仅支持标准的Shell命令,还提供了丰富的编程功能,如变量、条件语句、循环等。本文介绍了Linux Shell编程的基础知识,包括编辑和运行Shell脚本、权限设置、变量、输入与输出、条件语句、循环结构、程序的逻辑以及case语句。通过实践部分的一个示例脚本,我们展示了如何将这些概念组合起来以管理一个简单的Web服务器服务。

2401_85673878的博客 981

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Linux【实操篇】—— Shell 编程入门、变量

Linux Shell 中的变量分为系统变量和用户自定义变量。系统变量顾名思义就是系统已经设置好的变量,诸如HOMEHOME、HOMEPWD、USERUSER、USERSHELL 等都是系统变量。使用指令set可以查看系统中所有的系统变量。变量名称=值;unset 变量名;readonly 变量名称=值(静态变量不能撤销);$变量。#定义变量AA=100#输出变量echo A=$A#撤销变量Aunset Aecho $A#声明静态的变量B = 3。

2401_87197505的博客 1136

linux shell编程入门到精通

《Linux Shell 编程入门到精通》  

weixin_33688840的博客 233

Linux【实操篇】—— Shell 编程入门、变量、运算符、条件判断、流程控制

Linux 操作系统Shell编程快速入门、shell变量、、运算符、条件判断、流程控制(if、case、for、while语句)。

商务合作 | 共同学习 | 携手共进 11万+

Linux:Shell 编程基础入门

Shell 作为 Linux 系统的核心交互界面,不仅是命令行操作的桥梁,更是自动化脚本开发的基础。本文从 Shell 的核心概念出发,系统梳理其核心特性、脚本编写规范及变量操作技巧,适合零基础开发者快速入门 Shell 编程。本文从 Shell 基础概念出发,覆盖了交互特性、脚本编写、变量操作等核心内容。流程控制ifforwhile等语句实现复杂逻辑;函数与数组:封装代码复用,处理批量数据;实战场景:日志分析、自动化部署、监控脚本等。

2502_90615759的博客 720

《Linux shell脚本编程入门》

《Linux shell脚本编程入门》 LinuxOS在服务器以及近来引发热议的嵌入式系统中都得到广泛应用,《Linuxshell脚本编程入门》介绍的就是该程序必备的shell编程要素。尤其还收录了现在门户网站、企业等使用的主流套件CentOS(CommunityENTerpriseOperatingSystem)为基础的各种Linux命令,并以此为基础编写了Linuxshell脚本编程

chengying332 1171

Linux入门-shell编程

Linux基础-shell编程简单介绍

BigSmileBigSun的博客 225

Linux Shell 脚本编程极简入门指南

15分钟掌握Shell脚本基础语法,涵盖变量、循环、函数等核心操作,附自动化实战案例!本文配套所有代码均已通过ShellCheck验证 ✅

qq_36979952的博客 1166

Linux之Shell脚本编程入门

Linux之Shell脚本编程入门,包括shell变量、运算符、条件判断、流程控制等语法案例

yuanjinshenglife的专栏 2336

Linux——Shell编程_Shell概述及脚本入门

1、Shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。Shell还是一个功能相当强大的编程语言,易编写、易调试、灵活性强。2、查看Linux提供的Shell解析器操作:在终端中输入 cat /etc/shells。

m0_57086839的博客 394

Linux下的shell语言编程入门

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

首席技术执行官CTO(Chief Technology Officer)|技术总监--邓斌博客 5399

【Linux】快速入门shell编程

每天都得进步,哪怕是一点! 文章目录一.shell基本介绍1.基本介绍2.shell脚本的执行要求3.脚本的常用执行方式二.shell变量1.基本介绍2.shell变量的定义和撤销3.定义变量的规则4.将命令的结果赋值给变量5.设置环境变量7.位置参数变量8.预定义变量9.shell中的运算符三.流程控制-条件控制1.条件判断基本语法2.常用的条件判断 `重点`2.1.字符串比较2.2.两个整数的比较2.3.按照文件权限进行判断2.4.按照文件类型进行判断2.5.基本案例3.if判断语句3.1.基本语法3.

xiexianyou666的博客 2298
上一篇: C语言中的字符输入以及符号常量EOF
下一篇: Linux AT&T 汇编语言开发指南
静心学习
博客等级 码龄15年 1粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值