Linux的shell编程(上)

Linux Shell编程 ​ Shell是一个命令行解释器程序规范,他接受应用程序/用户命令,然后调用操作系统内核完成相关的功能。它是用户使用 Linux 的桥梁。简单来说Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。也可以这样认为,linux中的shell就是linux内核的一个外层保护工具,并负责完成用户与内核之间的交互​ Shell还是一个功能相当强大的编程语言,易编写、易调试、灵活性强。 阅读详情
 
Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统的关键。可以说,shell使用的熟练程度反映了用户对Linux使用的熟练程度。

  一、什么是shell

  当一个用户登录Linux系统之后,系统初始化程序init就为每一个用户运行一个称为shell(外壳)的程序。那么,shell是什么呢?确切一点说,shell就是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至是编写一些程序。

  当用户使用Linux时是通过命令来完成所需工作的。一个命令就是用户和shell之间对话的一个基本单位,它是由多个字符组成并以换行结束的字符串。shell解释用户输入的命令,就象DOS里的command.com所做的一样,所不同的是,在DOS中,command.com只有一个,而在Linux下比较流行的shell有好几个,每个shell都各有千秋。一般的Linux系统都将bash作为默认的shell。

  二、几种流行的shell

  目前流行的shell有ash、bash、ksh、csh、zsh等,你可以用下面的命令来查看你自己的shell类型:

   #echo $SHELL

   $SHELL是一个环境变量,它记录用户所使用的shell类型。你可以用命令:

   #shell-name

  来转换到别的shell,这里shell-name是你想要尝试使用的shell的名称,如ash等。这个命令为用户又启动了一个shell,这个shell在最初登录的那个shell之后,称为下级的shell或子shell。使用命令:

   $exit

  可以退出这个子shell。

  使用不同的shell的原因在于它们各自都有自己的特点,下面作一个简单的介绍:

   1.ash

   ash shell是由Kenneth Almquist编写的,Linux中占用系统资源最少的一个小shell,它只包含24个内部命令,因而使用起来很不方便。

   2.bash

   bash是Linux系统默认使用的shell,它由Brian Fox和Chet Ramey共同完成,是Bourne Again Shell的缩写,内部命令一共有40个。Linux使用它作为默认的shell是因为它有诸如以下的特色:

   (1)可以使用类似DOS下面的doskey的功能,用方向键查阅和快速输入并修改命令。

   (2)自动通过查找匹配的方式给出以某字符串开头的命令。

   (3)包含了自身的帮助功能,你只要在提示符下面键入help就可以得到相关的帮助。

   3.ksh

   ksh是Korn shell的缩写,由Eric Gisin编写,共有42条内部命令。该shell最大的优点是几乎和商业发行版的ksh完全兼容,这样就可以在不用花钱购买商业版本的情况下尝试商业版本的性能了。

   4.csh

   csh是Linux比较大的内核,它由以William Joy为代表的共计47位作者编成,共有52个内部命令。该shell其实是指向/bin/tcsh这样的一个shell,也就是说,csh其实就是tcsh。

   5.zch

   zch是Linux最大的shell之一,由Paul Falstad完成,共有84个内部命令。如果只是一般的用途,是没有必要安装这样的shell的。
 
      

  三. shell程序设计(基础部分)

  其实作为命令语言交互式地解释和执行用户输入的命令只是shell功能的一个方面,shell还可以用来进行程序设计,它提供了定义变量和参数的手段以及丰富的程序控制结构。使用shell编程类似于DOS中的批处理文件,称为shell script,又叫shell程序或shell命令文件。
   1.shell基本语法
   shell的基本语法主要就是如何输入命令运行程序以及如何在程序之间通过shell的一些参数提供便利手段来进行通讯。
   (1)输入输出重定向
  在Linux中,每一个进程都有三个特殊的文件描述指针:标准输入(standard input,文件描述指针为0)、标准输出(standard output,文件描述指针为1)、标准错误输出(standard error,文件描述指针为2)。这三个特殊的文件描述指针使进程在一般情况下接收标准输入终端的输入,同时由标准终端来显示输出,Linux同时也向使用者提供可以使用普通的文件或管道来取代这些标准输入输出设备。在shell中,使用者可以利用“>”和“<”来进行输入输出重定向。如:
   command>file:将命令的输出结果重定向到一个文件。
   command>&file:将命令的标准错误输出一起重定向到一个文件。
   command>>file:将标准输出的结果追加到文件中。
   command>>&file:将标准输出和标准错误输出的结构都追加到文件中。
   command
   (2)管道pipe
   pipe同样可以在标准输入输出和标准错误输出间做代替工作,这样一来,可以将某一个程序的输出送到另一个程序的输入,其语法如下:
   command1| command2[| command3...]
  也可以连同标准错误输出一起送入管道:
   command1| &command2[|& command3...]
   (3)前台和后台
  在shell下面,一个新产生的进程可以通过用命令后面的符号“;”和“&”来分别以前台和后台的方式来执行,语法如下:
   command
  产生一个前台的进程,下一个命令须等该命令运行结束后才能输入。
   command &
  产生一个后台的进程,此进程在后台运行的同时,可以输入其他的命令。
   2。shell程序的变量和参数
  像高级程序设计语言一样,shell也提供说明和使用变量的功能。对shell来讲,所有变量的取值都是一个字符串,shell程序采用$var的形式来引用名为var的变量的值。
   Shell有以下几种基本类型的变量:
   (1)shell定义的环境变量
   shell在开始执行时就已经定义了一些和系统的工作环境有关的变量,这些变量用户还可以重新定义,常用的shell环境变量有:
   HOME:用于保存注册目录的完全路径名。
   PATH:用于保存用冒号分隔的目录路径名,shell将按PATH变量中给出的顺序搜索这些目录,找到的第一个与命令名称一致的可执行文件将被执行。
   TERM:终端的类型。
   UID:当前用户的标识符,取值是由数字构成的字符串。
   PWD:当前工作目录的绝对路径名,该变量的取值随cd命令的使用而变化。
   PS1:主提示符,在特权用户下,缺省的主提示符是“#”,在普通用户下,缺省的主提示符是“$”。
   PS2:在shell接收用户输入命令的过程中,如果用户在输入行的末尾输入“”然后回车,或者当用户按回车键时shell判断出用户输入的命令没有结束时,显示这个辅助提示符,提示用户继续输入命令的其余部分,缺省的辅助提示符是“>”。
   (2)用户定义的变量
  用户可以按照下面的语法规则定义自己的变量:
  变量名=变量值
  要注意的一点是,在定义变量时,变量名前不应加符号“$”,在引用变量的内容时则应在变量名前加“$”;在给变量赋值时,等号两边一定不能留空格,若变量中本身就包含了空格,则整个字符串都要用双引号括起来。
  在编写shell程序时,为了使变量名和命令名相区别,建议所有的变量名都用大写字母来表示。
  有时我们想要在说明一个变量并对它设定为一个特定值后就不在改变它的值,这可以用下面的命令来保证一个变量的只读性:
   readly 变量名
  在任何时候,建立的变量都只是当前shell的局部变量,所以不能被shell运行的其他命令或shell程序所利用,export命令可以将一局部变量提供给shell执行的其他命令使用,其格式为:
   export 变量名
  也可以在给变量赋值的同时使用export命令:
   export 变量名=变量值
  使用export说明的变量,在shell以后运行的所有命令或程序中都可以访问到。
   (3)位置参数
  位置参数是一种在调用shell程序的命令行中按照各自的位置决定的变量,是在程序名之后输入的参数。位置参数之间用空格分隔,shell取第一个位置参数替换程序文件中的$1,第二个替换$2,依次类推。$0是一个特殊的变量,它的内容是当前这个shell程序的文件名,所以,$0不是一个位置参数,在显示当前所有的位置参数时是不包括$0的。
   (4)预定义变量
  预定义变量和环境变量相类似,也是在shell一开始时就定义了的变量,所不同的是,用户只能根据shell的定义来使用这些变量,而不能重定义它。所有预定义变量都是由$符和另一个符号组成的,常用的shell预定义变量有:
   $#:位置参数的数量
   $*:所有位置参数的内容
   $?:命令执行后返回的状态
   $$:当前进程的进程号
   $!:后台运行的最后一个进程号
   $0:当前执行的进程名
  其中,“$?”用于检查上一个命令执行是否正确(在Linux中,命令退出状态为0表示该命令正确执行,任何非0值表示命令出错)。
   “$$”变量最常见的用途是用作临时文件的名字以保证临时文件不会重复。
   (5)参数置换的变量
   shell提供了参数置换能力以便用户可以根据不同的条件来给变量赋不同的值。参数置换的变量有四种,这些变量通常与某一个位置参数相联系,根据指定的位置参数是否已经设置类决定变量的取值,它们的语法和功能分别如下。
   a. 变量=${参数-word}:如果设置了参数,则用参数的值置换变量的值,否则用word置换。即这种变量的值等于某一个参数的值,如果该参数没有设置,则变量就等于word的值。
   b. 变量=${参数=word}:如果设置了参数,则用参数的值置换变量的值,否则把变量设置成word然后再用word替换参数的值。注意,位置参数不能用于这种方式,因为在shell程序中不能为位置参数赋值。
   c. 变量=${参数?word}:如果设置了参数,则用参数的值置换变量的值,否则就显示word并从shell中退出,如果省略了word,则显示标准信息。这种变量要求一定等于某一个参数的值,如果该参数没有设置,就显示一个信息,然后退出,因此这种方式常用于出错指示。
   d. 变量=${参数+word}:如果设置了参数,则用word置换变量,否则不进行置换。
  所有这四种形式中的“参数”既可以是位置参数,也可以是另一个变量,只是用位置参数的情况比较多
 
 
Linux学习 shell编程 1、linux提供的解释器有哪些:2、bash和sh的关系sh实际就是bash的一个软链接(快捷方式)3、rocky linux 默认解析器是bash。 阅读详情

相关推荐

SBP依赖计算中的蝴蝶效应:一个Prefab修改如何触发全量重建?

本文深入探讨了Unity中SBP(Scriptable Build Pipeline)依赖计算的蝴蝶效应,解析了Prefab修改如何触发全量重建的机制。通过分析Asset与Object的层级关系、依赖计算的三种维度及CacheEntry系统,揭示了全量重建的根本原因,并提供了依赖可视化工具开发、优化策略与最佳实践,帮助开发者提升构建效率。

weixin_29015051的博客 445

Linux 下shell编程

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

知秋一叶 5106

手把手教你用Cadence Virtuoso完成LNA全套仿真:基于SpectreRF手册的实战补充

本文详细指导如何使用Cadence Virtuoso和SpectreRF完成LNA的全套仿真,涵盖噪声仿真、增益压缩、THD分析及双音IP3测量等关键步骤。针对官方手册中的常见问题,提供了12个实战解决方案,包括hbnoise函数选择、双音信号源配置等,帮助工程师高效完成射频IC设计。

weixin_29102619的博客 524

Linux系统的Shell编程

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

weixin_55118477的博客 3239

OpenClaw 接入智谱 GLM-5-Turbo 龙虾套餐:完整避坑指南与 SOP

OpenClaw 接入智谱 GLM-5-Turbo 的核心在于“端点匹配”和“多渠道验证”。端点匹配:龙虾套餐必须用标准端点。多渠道验证:遇到 TUI 不显示时,用curl或飞书机器人验证,不要被 Bug 误导。希望这份 SOP 能帮你顺利跑通 OpenClaw + GLM-5-Turbo,享受强大的 AI 编程助手!

Aaron_liu20的博客 1704

保姆级教程:在MMSegmentation框架下复现HRNetV2+OCR语义分割(附完整代码与调试技巧)

本文提供了一份详细的MMSegmentation框架下HRNetV2+OCR语义分割的复现教程,包含完整代码与调试技巧。通过解析HRNetV2的多尺度特征融合和OCR模块的注意力计算,帮助开发者快速实现这一经典语义分割方案,并解决实际工程中的常见问题。

weixin_42527464的博客 360

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

c#视觉应用开发中如何使用Emgu CV在C#中进行图像处理?

Emgu CV 是 OpenCV 的 .NET 包装器,可以让开发者在 .NET 语言(如 C#)中使用 OpenCV 的功能进行图像处理。在进行图像处理时,Emgu CV 提供了丰富的 API 可以使用。PictureBoxImageBox下面是一个详细的示例,演示如何使用 Emgu CV 在 C# 中进行基本的图像处理,包括加载图像、转换为灰度图像、进行边缘检测,然后显示结果。byte在这个示例中,我们使用了三个PictureBox控件来显示原始图像、灰度图像和边缘检测后的图像。

zhangzhechun的专栏 670

Linux的Shell编程

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

m0_75260099的博客 3381

rk3399开发环境的介绍

由于Bluez的介绍文档有限,以及对Linux 系统/驱动概念、D-Bus 通信和蓝牙协议都有要求,加上网络上其实没有一个完整的介绍Bluez系列的文档,所以不管是蓝牙初学者还是蓝牙从业人员,都有不小的难度,学习曲线也相对较陡,所以我有了这个想法,专门对Bluez做一个系统性的介绍,尽可能的涵盖所有内容。

朝气蓬勃 711

【Java基础知识 1】Java入门级概述

优快云最强Java专栏,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。

学Java,找哪吒 16万+

linux shell编程总结

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

ltbook的专栏 4557

分布式计算Ray框架:从入门到精通完全教程

想象一下,你有一个机器学习模型要训练,数据集大到让你的笔记本电脑直冒烟;或者你需要并行跑几百个爬虫任务,但线程池和多进程搞得你头晕眼花。传统的单机计算已经hold不住这些场景,分布式计算应运而生。然而,传统的分布式框架(如Hadoop、Spark)要么配置复杂,要么对动态任务支持不佳。这时候,Ray闪亮登场!Ray是一个开源的分布式计算框架,专为高性能、灵活性和易用性而生。它最初由UC Berkeley的RISELab团队开发,目标是让开发者用最少的代码实现分布式任务。无论是数据处理、机器学习,还是仿真任务

大模型大数据攻城狮的专栏 1320

Linux Shell 编程

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

zcz1607127821的博客 1149

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

怀旧版电脑GBC模拟器

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

Linux——Shell编程

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

2501_91237346的博客 1011

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

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

cdeveloper 的专栏 4万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Linux之Shell编程

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

鬼谷子的博客 299

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中的一些基本操作

qq_61272601的博客 940

【Linux】Shell编程【一】

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

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

Linux下的shell语言编程入门

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

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

第14章 Linux的shell编程

随着各式Linux系统的图形化程度的不断提高,用户在桌面环境下,通过点击、拖拽等操作就可以完成大部分的工作。然而,许多Ubuntu Linux功能使用Shell命令来实现,要比使用图形界面交互,完成的更快、更直接。英文单词Shell可直译为“贝壳”。“贝壳”是动物作为外在保护的一种工具。可以这样认为,Linux中的Shell就是Linux内核的一个外层保护工具,并负责完成用户与内核之间的交互命令是用户向系统内核发出控制请求,与之交互的文本流。

微客猿 1883

Linux之shell编程

定义变量:变量名=变量值,注意,=号前后不能有空格撤销变量:unset变量名声明静态变量:readonly 变量,注意:不能unset声明全局变量:export 变量变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。等号两侧不能有空格在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。变量的值如果有空格,需要使用双引号或单引号括起来。Action;cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。

qq_45923849的博客 917

Linux扩展——shell编程

shell概述 shell变量 运算符 $((表达式)) $[表达式] 条件判断 test condition 或 [ condition ] ★流程控制 read读取控制台输入 函数 Shell工具 cut awk sort sed wc 正则表达式

weixin_43739821的博客 1085
上一篇: 英语口头禅
下一篇: Linux的shell编程(下)
Image_Graphics
博客等级 码龄20年 18粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值