Linux: Shell编程入门

Shell 编程入门


1 ) Shell 概念

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

2 ) Shell 脚本

  • 脚本,script 是批处理文件的延伸,是一种纯文本保存的程序
  • 计算机的脚本程序是确定的一系列控制计算机进行运算操作动作的组合
  • 在其中可以实现一定的逻辑分支

3 )Shell的分类

  • 我们把 linux中的两个不同的环境分开来看:终端命令行环境,图形界面环境
  • 在大多数的时候,我们使用的是图形界面,桌面版
  • 在终端命令行当中,可以实现很多在图形界面中不能完成的复杂任务
  • linux有不少图形界面环境,例如 GNOME, KDE, XFCE等
  • 但是终端命令行环境貌似长得都一样,但也有好多种,对应的就是不同的Shell
  • 不同的终端命令行之间的区别不像图形界面那么明显
  • 因为终端命令行一般都是黑底白字, 颜色一般可配置,根据Shell的不同,命令行所能提供的功能也不同
  • 因此我们可以把不同的终端命令行环境称为不同的shell了,下面进行分类

3.1 Sh

  • Bourne Shell 的缩写,可以说是目前所有Shell的祖先

3.2 Bash

  • Bash: Bourne Again Shell 的缩写
  • 比 Sh 多了一个 Again, 英文: 又, 再
  • 它是 Sh的进阶版本,比Sh更优秀
  • 它也是目前大多数linux发行版以及苹果的macos操作系统的默认的shell

3.3 Ksh

  • Ksh: Korn Shell 的缩写
  • 一般在收费的 Unix 版本上比较多见,但也有免费版本的

3.4 Csh

  • Csh 是 C Shell 的缩写
  • 这个shell, 它的语法有点类似c语言

3.5 Tcsh

  • Tcsh 是 Tenex C Shell 的缩写
  • Csh 的优化版本

3.6 Zsh

  • Zsh: Z Shell 的缩写
  • 比较新的一个Shell, 集 Bash, Ksh, Tcsh 各家之大成
  • Github 上又一个 Zsh 的轻松配置程序叫做 oh-my-zsh

各个 Shell 的演化关系

  • 首先Sh是最古老的,然后它演化出来Csh, Bash, Ksh,然后Csh又演化出Tcsh
  • Zsh 是集 Bash, Ksh, Tcsh 之各家大成,但实际上, Sh 始终比 Bash 的使用面更广
  • linux 是模仿 unix 而创建的,几乎所有源自于unix的操作系统,包括linux都是有Sh的
  • 但不是每一个系统都有Bash

Shell 的作用

  • shell 是管理命令行的程序,其实Shell这个程序在等待你输入那些命令
  • shell 帮助记住在终端中输入的命令:键盘 ↑ ↓ 键可以回退追踪之前输入的命令
  • 用组合键 Ctrl + R 在终端的历史记录中搜索执行过的命令
  • 用Tab键自动补全输入过的命令,比如输入 ca 再按两次TAB就会提示所有ca开头的命令
  • 用Tab键也可自动补全路径
  • 也可以控制进程,把进程放入后台或暂停,如:CTRL + C, CTRL + Z
  • 还可以重定向命令,用到 <, >, |, 等符号
  • 还可以定义别名,例如:ll 可以被定义为 ls -al 的别名
  • 简而言之,shell 提供的所有可以让你去运行命令的基础功能
  • 用下图来简单的表示用户share操作系统内核和硬件的一个关系
  • Shell 就像用户和操作系统之间的一个中介或桥梁一样
  • 这也是它的名字Shell的由来,很像去包裹操作系统内核的一个外壳
  • Shell 本来在英语当中就是外壳的意思,Shell 就有点像鸡蛋的外壳一样
  • 里面就有点像蛋白和蛋黄,我们可以把 Shell 比作一个蛋壳
  • 这个内核是蛋白,然后这个硬件就是蛋黄, 整体就是像一颗鸡蛋
  • .bashrc 这个文件其实就是 bash 的一个配置文件
  • 每个linux用户都可以定义自己的 .bashrc 来配置 bash 这个Shell
  • 它可以指定bash的命令提示符样式定义别名等等
  • 在使用linux的过程中,我们经常会碰到一些以rc结尾的文件:.bashrc, .zshrc, .init.rc, .vimrc 等
  • 一般以rc结尾的, 多为配置文件里面包含了软件运行前会去读取并运行的这些初始化的命令

安装一个新的Shell

  • 一般,你的linux系统当中大概只安装了以下的几种Shell: sh, csh, bash
  • 如果你想要安装另一个Shell,比如 KSH 可以这样安装: $ sudo yum install ksh
  • zsh 也是一样的安装 $ sudo yum install zsh
  • 安装好后,要进行切换才能生效,比如执行:$ ksh 或 $ zsh
  • 或者使用专门切换shell 的命令 : $ chsh 它是 Change Shell 的缩写
    • 如果当前是 /bin/bash, 你要替换成ksh,要输入 /bin/ksh
    • 回车即可保存
  • 为什么切换Shell至关重要呢?
    • 因为你的 shell 脚本需要依赖于某一个 shell
    • 简单来说,你使用不同的shell,语法其实是不一样的
  • 我们可以选择 sh 的一个脚本, 基本可以运行在大多数系统上,但是Sh的这个语法却并不好用
  • 我们选择使用bash, 更容易编写,更常用

编写一个Shell脚本

1 )创建脚本文件 vim test.sh

  • 注意 sh 就是 shell 的缩写,是一种shell约定俗成的命令惯例

2 )指定脚本要使用的 Shell

  • 在写一个 Shell 脚本时,第一要做的事情就是指定要使用哪种Shell 来解析/运行它
  • 因为各种Shell语法不尽相同
    #!/bin/bash
    
  • 这里, #! 被称为 Sha-bang, 或 Shebang
  • 这里被指定用 bash 执行

3 )运行命令

  • 原则很简单:只需要写入你想要执行的命令
    #!/bin/bash
    ls
    
  • 这里这个脚本会列出当前所有文件

4 )注释

  • 注释不会被执行,但是用于解释我们的脚本做了什么
  • Shell 脚本注释以 # 开头
    #!/bin/bash
    # 列出运行的文件
    ls
    

5 )运行Shell脚本

  • 保存上述文件,$ :x
  • 给脚本添加可执行权限 $ chmod +x test.sh
  • 运行脚本 $ ./test.sh

6 ) 以调试模式运行

  • 调试一个脚本程序 $ bash -x test.sh
  • 参数 -x 表示以调试模式运行
  • Shell 就会把我们的脚本文件运行时的细节打印出来了

7 )创建属于自己的命令

  • 我们自己的命令和内置的一些命令,如:pwd, ls 等不同的是
  • 内置命令在PATH环境中,可以被识别
  • PATH变量包含了你系统内所有可被直接执行的程序的路径
  • 打印出 PATH 变量:$ echo $PATH
  • 如果 test.sh 在PATH中的某一个路径中,直接执行 test.sh 即可执行,不用在特定的目录下
  • 但是,注意,我们尽可能要保持PATH路径内的整洁,不要乱拷贝东西进去
  • 也可以创建软链,这里不做赘述

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

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

相关文章

【ArcGIS Pro实操第8期】绘制WRF三层嵌套区域

【ArcGIS Pro实操第8期】绘制WRF三层嵌套区域 数据准备ArcGIS Pro绘制WRF三层嵌套区域Map-绘制三层嵌套区域更改ArcMap地图的默认显示方向指定数据框范围 Map绘制研究区Layout-布局出图 参考 本博客基于ArcGIS Pro绘制WRF三层嵌套区域&#xff0c;具体实现图形参考下图&#xf…

从零开始学五笔(七):折区字根

讲解格式&#xff1a; 先介绍按键的区位号、口诀内容、口诀说明然后列每个字根能组成什么汉字&#xff0c;难拆字将用中括号标出 ‍ N 键 区位号&#xff1a;51 口诀&#xff1a;已半巳满不出己&#xff0c;左框折尸心和羽 说明&#xff1a; 已半巳满不出己&#xff1a;指…

CentOS 8修改Linux配置文件指定属性的值

1.前提&#xff1a; 存在test空文件&#xff08;test位于/etc/sysconfig/network-scripts目录&#xff09; 2.test文件插入内容&#xff1a; 1&#xff09;添加内容&#xff1a;IPADDR192.168.132.129 echo IPADDR192.168.132.129 | sudo tee -a /etc/sysconfig/network-sc…

Linux中级(DNS域名解析服务器)

一。产生原因1.IP地址&#xff1a;是互联网上计算机唯一的逻辑地址&#xff0c;通过IP地址实现不同计算机之间的相互通信&#xff0c;每台联网计算机都需要通过IP地址来互相联系和分别&#xff0c;但由于IP地址是由一串容易混淆的数字串构成&#xff0c;人们很难记忆所有计算机…

大数据治理平台建设规划方案(71页WORD)

随着信息化时代的到来&#xff0c;大数据已成为企业管理和决策的重要基础。然而&#xff0c;大数据的快速增长和复杂性给数据的管理和治理带来了巨大挑战。为了有效应对这些挑战&#xff0c;构建一个高效、稳定的大数据治理平台显得尤为重要。 文档介绍&#xff1a; 该平台旨在…

Boost电路双闭环控制MATLAB仿真

一、Boost电路电流内环控制MATLAB仿真模型 1.MATLAB仿真模型 1.1.仿真模型图 因为要使用电流内环控制&#xff0c;相比较于开环控制中直接给定MOS开关的占空比&#xff0c;这里通过把电路的平均电流和一电流基准值相比较来控制MOS开关的占空比&#xff0c;因此称为闭环控制。…

MAC电脑的JDK、MAVEN配置及IDEA激活

1、JDK配置环境 vim ~/.bash_profile # 添加 Java 目录&#xff0c;类路径和指令路径的配置&#xff0c;若已存在则用目标值覆盖 export JAVA_HOME/Library/Java/JavaVirtualMachines/jdk1.8.0_311.jdk/Contents/Home export CLASSPATH.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/…

React中的hook

React中的hook究竟是什么&#xff1f; 有哪些hook&#xff1f; hook的两大规则 为什么hook要在顶层调用&#xff1f; hook的调用需要在每一次render后都按照一样的顺序进行调用&#xff0c;否则会出现类似“野指针”的情况&#xff0c;但是要做到这一步&#xff0c;就需要hook在…

新手直播方案

简介 新手直播方案 &#xff0c;低成本方案 手机/电脑 直接直播手机软件电脑直播手机采集卡麦电脑直播多摄像机 机位多路采集卡 多路麦加电脑&#xff08;高成本方案&#xff09; 直播推流方案 需要摄像头 方案一 &#xff1a;手机 电脑同步下载 网络摄像头 软件&#xff08…

spring整合使用xml方式整合Druid数据源连接池

1.普通的JDBC数据库连接使用 DriverManager 来获取&#xff0c;每次向数据库建立连接的时候都要将 Connection加载到内存中&#xff0c;再验证用户名和密码(得花费0.05s&#xff5e;1s的时间)。需要数据库连接的时候&#xff0c;就向数据库要求 一个&#xff0c;执行完成后再断…

【WIN】WIN10_WSL_Ubuntu18.04_ROS_rviz_docker

WIN10安装WSL Microsoft Store 安装编译套件 sudo apt-get install build-essential apt换源 Debian / Ubuntu 的官方源在国内访问很慢&#xff0c;咱们更换为清华大学 TUNA 的软件源镜像 执行下面命令&#xff0c;备份 apt 安装源&#xff1a; sudo cp /etc/apt/sources.l…

【问题解决】pnpm : 无法将“pnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

今天配置完poetry环境变量之后pnpm不能用了 具体报错 pnpm : 无法将“pnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c;然后再试一次。 所在位置 行:1 字符: 1pnpm run dev~~~~ Ca…

计算机毕业设计Python+大模型租房推荐系统 租房大屏可视化 租房爬虫 hadoop spark 58同城租房爬虫 房源推荐系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 用到的技术: 1. python…

大一物联网要不要转专业,转不了该怎么办?

有幸在2014年&#xff0c;踩中了物联网的风口&#xff0c;坏消息&#xff0c;牛马的我&#xff0c;一口汤都没喝上。 依稀记得&#xff0c;当时市场部老大&#xff0c;带我去上海参加电子展会&#xff0c;印象最深的&#xff0c;一些物联网云平台&#xff0c;靠着一份精美PPT&a…

2024年项目管理新风向:敏捷开发与瀑布开发,哪个更优?

一、项目管理的多样格局 2024 年&#xff0c;项目管理领域展现出丰富多样的格局。数字化趋势愈发明显&#xff0c;项目管理软件普及度不断提高&#xff0c;据相关资料显示&#xff0c;随着云计算、大数据等技术的成熟&#xff0c;项目管理软件将更加普及&#xff0c;实现项目信…

OpenCV双目相机外参标定C++

基于OpenCV库实现双目测量系统外参标定过程。通过分析双目测量系统左右相机拍摄的棋盘格标定板图像&#xff0c;包括角点检测、立体标定、立体校正和畸变校正的步骤&#xff0c;获取左右相机的相对位置关系和姿态。 a.检测每张图像中的棋盘格角点&#xff0c;并进行亚像素级精…

Python游戏开发超详细(基础理论知识篇)

一、引导&#xff1a; Python游戏开发是一个非常有趣且富有挑战性的领域。通过Python&#xff0c;你可以利用其强大的库和框架来创建各种类型的游戏&#xff0c;从简单的2D游戏到复杂的3D游戏。以下是第一课的基础理论知识&#xff0c;帮助你入门Python游戏开发。 二、理论知识…

使用Prometheus对微服务性能自定义指标监控

背景 随着云计算和容器化技术的不断发展&#xff0c;微服务架构逐渐成为现代软件开发的主流趋势。微服务架构将大型应用程序拆分成多个小型、独立的服务&#xff0c;每个服务都可以独立开发、部署和扩展。这种架构模式提高了系统的可伸缩性、灵活性和可靠性&#xff0c;但同时…

【数据结构和算法】三、动态规划原理讲解与实战演练

目录 1、什么是动态规划&#xff1f; 2、动态规划实战演练 2.1 力扣题之爬楼梯问题 &#xff08;1&#xff09;解题思路1: &#xff08;2&#xff09;解题思路2: &#xff08;3&#xff09;动态规划&#xff08;DP&#xff09;&#xff1a;解题思路 &#xff08;4&#x…

ArcGIS必会的选择要素方法(AND、OR、R、IN等)位置选择等

今天来看看ArcGIS中的几个选择的重要使用方法 1、常规选择、 2、模糊查询、 3、组合复合条件查询&#xff08;AND、OR、IN&#xff09;&#xff0c; 4、空值NULL查询 5、位置选择 推荐学习&#xff1a; 以梦为马&#xff0c;超过万名学员学习ArcGIS入门到实战的应用课程…