编程基础 - 初识shell

编程基础 - 初识shell

返回序言及专栏目录


文章目录

  • 编程基础 - 初识shell
  • 前言
  • 一、Linux的路径
      • 1、绝对路径
      • 2、相对路径
      • 3、特殊路径
  • 二、交互式工作
      • 1、先联系上shell
      • 2、交互式命令
  • 三、执行脚本
  • 四、sh和bash的区别
  • 总结


前言

shell是Linux内核外的一层壳,是用户与Linux交互的桥梁。也可以叫他命令解释器,用户输入的命令由它告诉内核要做什么,内核是负责对硬件进行管理与操作的,我们用户无法直接告诉内核我们要做什么,所以要通过shell和内核进行沟通,从而达到使用计算机资源的目的。

shell有两种工作方式,交互式命令解释:用户输入命令,它立即执行给出结果。另一种就是解释程序脚本,用户给出一个已编写好的由多个命令按一定逻辑组织好的文本文件。shell读取并执行这个程序脚本,按设计好的程序运行,就是我们所说的真正意义上的编程。从这个角度讲,shell是一种解释型的编程语言。它与C/C++不同,不需要编译。

编译和解释两类编程语言都是主流,通常编译型语言运行时更有效率,因为它事先已经编译成二进制代码,cpu能够直接认识,c/c++就是编译型语言的代表。而解释型语言更容易编写调试,通常都有交互式命令解释工作方式,所见即所得,正因为由解释器负责给cpu翻译,自然在效率上就要差很多,python、shell、javascript都是此类语言的知名代表。

对于现代计算机而言,运行速度已经不是c/c++语言刚诞生的时代可以想像的了,当时的巨型计算机还不如现在丢在垃圾堆里的路由器。除了底层开发,运行效率已经不是编程要考虑的首要问题了,所以两类编程语言都各自有很广的应用方向。如WEB App就大量使用javascript和python、运维工作那就是shell最方便了,python也很好(shell、python这两种语言,Linux通常自带的)。


一、Linux的路径

什么叫路径?就是用来表示位置的方法。windows中我们把文件存在d盘的我的文档这个文件夹,这就是路径,在windows中写作d:\我的文档。在Linux也是类似的情况,不过Linux没有d:盘这个概念,它当然也分区,也可以有多个硬盘。但Linux一切皆文件,某个硬盘那是一个文件,某个分区也是一个文件。所以在路径表示这点上它比windows简单,虽然让硬盘工作要麻烦一些。

简单概括的说:Linux有三种路径表示方法

1、绝对路径

/根目录(只有一个根目录)为基点,就可以表示任意一个文件夹(也叫目录)的路径了,上面所说的d盘的我的文档,在Linux中可能会是这样的:

# shell的杠与windows是相反的。windows的杠叫反斜杠,shell这个叫斜杠。
/mnt/sda2/我的文档

2、相对路径

就是我们要表示的位置相对于当前所在位置的表示方法,windows中也有一样的写法,假设Windows中现在位于d盘,那么可以写成./我的文档,也就是说./ 表示所在文件夹。../表示上一级目录。Linux和windows一样的表示方法:假设我们目前位于/mnt目录

# windows用于表示相对路径的斜杠又和Linux一样了 假设我们目前位于`/mnt`目录
./sda2/我的文档
# 根目录就可以表示成  假设我们目前位于`/mnt`目录
../

3、特殊路径

windows有很多特殊路径,用于表示用户文件夹的是:%USERPROFILE%。Linux只有一个特殊路径,~表示用户目录。另外,Linux是大小写敏感的,Admin不等于admin

我们用个实例演示一下:ls命令用于列出文件下的可见文件,cd和windows一样用于改变当前所在目录,cat用于读取文件内容。笔者在/tmp/home/root/目录下建了一个文件夹叫test,在test文件夹下建了一个myfile.txt的文件,在myfile.txt中写了一句话“this is a test”
在这里插入图片描述

ls /tmp/home/root/test/    # 命令要求列出tmp文件夹下home下root下test目录内的可见文件
myfile.txt
cat /tmp/home/root/test/myfile.txt  # 命令要求读出myfile.txt文件内容
this is a test
cd /tmp			# 进入/tmp目录
cd ./home/      # 进入当前目录下的home目录
cd ../			# 进入当前目录的上一级目录
cd ./home/root/test/   # 进入当前目录下的home目录下root下test目录
cd ../../				# 进入当前目录的上两级目录,就是home目录
cd ~				# 进入home下的root目录,因为我们就是root用户

二、交互式工作

这是一种类似于我们通过聊天软件与人文字聊天的感觉,特别的它还挺听话的,只要你说的不是shell不懂的外语,当然它暂时不能和你奔现~ 而且她一般没有废话,只管埋头干活,挺老实的。笔者暂时充当人类语言与shell语言的翻译,给读者演示一下如何与shell美眉交谈:

1、先联系上shell

就是找个聊天软件,然后呼叫美眉嘛,大家都很熟的。比较知名的聊天软件有windows自带PowerShell、windows软件putty、Linux和Mac自带的bash、zsh(就是终端),都很简单好用。记得呼叫端口默认是221

# 就是:用户名@服务器ip地址
ssh admin@192.168.2.1

如果你是第一次这么联系,会问你真的要建立联系吗?回答y/n,如果是,你接着输入服务器的密码,就可以登陆和路由器或服务器的shell建立联系了。
在这里插入图片描述

  • 如上图就是刚登陆的样子,这其中第一行是路由器的系统和时间信息,如果是linux服务器就是linux的信息,无非就是多点字少点字的问题。
  • 第二行是提示行,它显示不少信息:admin是登陆用户,@后面是路由主机名。冒号后面是我们的登陆路径,这个目录其实就是上文提到的~家目录,每个用户登陆都会到自己的~目录。最后的#表示这个是超级用户,如果不是超级用户通常会显示$(各Linux系统有差别)。

2、交互式命令

下面我们来看看如何与shell交谈,等到混熟了,我们可以给shell写脚本,让它执行。就像聊天聊熟了就给人发文件一样。发个文件给它,它就替你干活了哦~

让shell去/tmp目录、看看/tmp/home/root/test目录下有什么。为了美观,没有必要的情况下笔者把admin@RT-AC3100-88B0:/tmp/home/root# 这个路径提示信息删除了。

cd /tmp  
ls -a /tmp/home/root/test    # -a 表示列出所有文件,包括隐藏文件
./          ../         myfile.txt

和windows一样有./../,用于表示自己当前目录和上一级目录。让shell返回上一级目录:

cd ..      # cd ../ 也是可以的
# 显示当前路径
pwd
/      # 已经回到根目录了

进入/tmp/home/root/test目录,并查看myfile.txt的内容

cd /tmp/home/root/test && cat myfile.txt
# 运行结果如下,可以看到由/根目录,切换到了/tmp/home/root/test并且显示了文件
# 可以用&&连接两个命令,&&表示和的意思 以下没有删除路径提示信息
admin@RT-AC3100-88B0:/# cd /tmp/home/root/test && cat myfile.txt
this is a test
admin@RT-AC3100-88B0:/tmp/home/root/test# 

三、执行脚本

好了,通过上面的示例,我们已经初步认识了shell美眉。很容易相处的嘛~ 我们可以给shell美眉写信了,它看懂了就会帮我们做事。小时候高斯同学告诉我们说:从1到100,这100个整数加起来的结果是5050,我们一直没算清楚,就请shell美眉帮我算一下:

#!/bin/sh
i=0
sum=0
while [ $i -lt 101 ]dolet sum=$sum+$ilet i=$i+1done
echo $sum

看不懂没关系,没有学过编程的人,一上手就要看懂这个脚本是不太可能的。这里只是演示脚本的工作方式,有这种脚本编程的概念即可,后面也会有详细的解释。当然有其它编程语言基础的人看这个就简单了。

  • 第一句#!/bin/sh表示所用解释器。固定写法(/bin/sh是解释器的路径,通常不会在其它路径),表示以本程序用sh解释器。
  • i=0 定义了一个变量i,你也可以用其它字母,但只能用大小写字母,_、和数字,且数字不能是第一个字符。用多个字符组合当然也可以,如下一行的sum
  • sum=0定义了变量sum,变量我们可以理解成一个存储各种数据(字母、数字等)的地方,这个地方就叫我们定义的名字,本例中就在sum和i中存储了0。这也叫初始化变量,就是给变量仓库放一个初始值把仓库占了先。
  • -lt是比较运算的小于,二个数比大小,幼儿园我认真学了的。笔者猜测是little的简写。
  • $是引用符,用于取变量值,它也经常用于取运算结果,是shell的固定写法。
  • while [ $i -lt 101 ] while英文意思是当…时候,那么这句话就是:当i号仓库放的值小于101的时候。
  • dodone是界定循环体的边界的固定写法。do就是做的意思,done是做完的意思。
  • echo 英文意思回声,就是你做完了给个回信哈~ 它就会把结果sum变量仓库里的东西显示在屏幕上。
  • 如果你想照着试试,请注意用英文输入法且格式要严格和笔者相同,主要指字符间的空格。

好了,不用太在意上面的东西,会有章节专门讲编程语法、和专业名词的。这里只是演示shell的工作方式,看个热闹有点概念就行,笔者把它写在路由器上了:
在这里插入图片描述
下面就是shell的执行结果:
在这里插入图片描述

  • 第一行是笔者用了Linux的vi编辑器,把脚本写好保存。vi会弹出一个编辑框,和记事本差不多,编辑完了保存后vi就消失了~
  • 第二行是给笔者刚写的脚本执行权限,权限问题后面讲。
  • 第三行是运行这个脚本,./是目录,虽然就在当前目录下,也不能省的,原理后面讲。
  • 第四行是脚本执行后的结果,由echo $sum 这个命令输出。

四、sh和bash的区别

bash 和 sh 命令都是Linux/Unix类系统上的 shell 解释器。但它们还是有些区别的:

bash 是 Bourne-Again shell 的缩写,是基于 Bourne shell 的改进版本,支持更多的功能和扩展。sh 命令是指 POSIX shell,是与 POSIX 标准兼容的 Unix shell。说人话就是:sh是标准版,bash是扩展版本。

至于有些文章说的什么没有命令补全、没有数组功能。经笔者实测,命令补全肯定有的,这和啥解释器没有关系,至于数组功能确实是缺失大部分的。比如数组中的[@][*]#{1..100}for (i=1;i<101;i++) 写法都是没有的,估计是不能给数组赋值。但基本的迭代功能是有的,有图为证:
在这里插入图片描述

总的来说,如果需要编写更加复杂的脚本或需要使用更多的内置命令和特性,建议使用 bash 命令。如果只需要编写简单的脚本或需要遵循 POSIX 标准,可以使用 sh 命令。这部分对路由用户没有太大实际意义,了解一下即可,sh写上万行的脚本也不少见(实践篇中会有提到)。


总结

本章我们初步认识了shell,真的就是一聊天机器人~ 就是跟她聊天要遵守她的语法规则。

返回专栏目录 <<<


  1. 计算机系统有65535个端口,某些端口约定俗成分配给了某种服务用,比如80端口给了http,443给了https,22就是给ssh用的。所以不用加端口即可使用,如果不是标准22端口就要加参数ssh admin@192.168.2.1 -p 2222 ↩︎

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

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

相关文章

大数据 MapReduce如何让数据完成一次旅行?

专栏上一期我们聊到MapReduce编程模型将大数据计算过程切分为Map和Reduce两个阶段&#xff0c;先复习一下&#xff0c;在Map阶段为每个数据块分配一个Map计算任务&#xff0c;然后将所有map输出的Key进行合并&#xff0c;相同的Key及其对应的Value发送给同一个Reduce任务去处理…

数据库设计-DDL

D D L \huge{DDL} DDL DDL&#xff1a;数据库定义语言&#xff0c;用来定义数据对象&#xff08;数据库、表&#xff09; 简单操作 首先在cmd中进行操作&#xff0c;登录数据库 show databases; -- 以列表的形式显示所有的数据库create database [if not exists] 数据库名称…

[C#]使用DlibDotNet人脸检测人脸68特征点识别人脸5特征点识别人脸对齐人脸比对FaceMesh

【官方框架地址】 https://github.com/takuya-takeuchi/DlibDotNet 【算法介绍】 DlibDotNet是一个开源的.NET库&#xff0c;用于实现机器学习和计算机视觉应用。它基于C库dlib&#xff0c;通过C/CLI封装了dlib的所有功能&#xff0c;为.NET开发者提供了简单易用的API。以下是…

Nacos 持久化及集群的搭建【微服务】

文章目录 一、统一配置管理二、微服务配置拉取三、配置热更新四、多环境共享配置五、Nacos 集群搭建1. 集群结构2. 初始化数据库3. 搭建集群 六、Nginx 反向代理七、启动项目测试 一、统一配置管理 案例练习的时候我们只有两个微服务&#xff0c;管理起来非常简单&#xff0c;但…

el-upload上传文件

需求&#xff1a;选中或拖拽文件后&#xff0c;使用http-request属性实现自动上传&#xff0c;并根据后端传回来的结果显示错误和控制fileList的显示&#xff0c;如果后端返回成功&#xff0c;则文件显示在文件列表处&#xff0c;如果后端返回失败&#xff0c;则文件列表不显示…

Qt/QML编程学习之心得:Timer的使用(22)

Qt中timer计时器如何使用? Timer的创建: void InitTimer(){myTimer = new QTimer(q);myTimer->setInterval(100); // 100msmyTimer->setSingleShot(true); //只运行一次的计时器QObject::connect(myTimer,SIGNAL(timeout()),q,SLOT(onTimeOut()));myTimer->start(…

Oracle分区表

文章目录 A. varchar2类型时间字段(20240102)分区实战1. 表要不要分区2. 将已经存在的表改造为分区表(时间字段&#xff0c;varchar2类型)3. 增加分区3.1 增加分区3.2 置换分区&#xff0c;不会复制索引&#xff0c;不要用这种语法建表&#xff0c;这是专门为置换分区用的3.3 分…

SonarQube 漏洞扫描

SonarQube 漏洞扫描 一、部署服务 1.1 docker方式部署 #安装docker curl -L download.beyourself.org.cn/shell-project/os/get-docker-latest.sh | sh yum install -y docker-compose #进去输入:set paste可以保证不穿行 [rootlocalhost sonar]# vim docker-compose.yml v…

java基于SSM的游戏商城的设计与实现论文

基于SSM的游戏商城的设计与实现 摘 要 当下&#xff0c;正处于信息化的时代&#xff0c;许多行业顺应时代的变化&#xff0c;结合使用计算机技术向数字化、信息化建设迈进。以前相关行业对于游戏信息的管理和控制&#xff0c;采用人工登记的方式保存相关数据&#xff0c;这种以…

【C++】内存对齐

本篇文章介绍C中的内存对齐&#xff0c;后续介绍C的union和C的variant的时候&#xff0c;需要用到这部分的知识。 占用内存 先回忆下C各个数据类型占用的内存大小&#xff1a; int&#xff1a;所占内存大小&#xff1a;4byte 32bit&#xff1b;char&#xff1a;所占内存大小…

x-cmd-mod | zuz - 压缩或解压文件

目录 简介首次用户子命令x zuz zx zuz uzx zuz uzrx zuz ls 相关链接 简介 zuz 为 x-cmd 中的必用模块之一&#xff0c;提供压缩与解压文件的功能。 x z 就是调用 x zuz z&#xff0c;可将目标文件压缩根据后缀名成指定格式&#xff0c;x uz 则可以解压任何格式的压缩包 首次…

四个模型建模及数据分析整理(基于Titanic数据集)

目录 介绍&#xff1a; 二、数据 2.1引用数据 2.2检查缺失数据 2.2.1手动检查缺失数据 2.2.2查看某一个特征值为空数据 2.3补充缺失数据 2.3.1盒图 2.3.2手动用均值填补缺失数据 2.3.3手动用类别填补缺失数据 三、数据分析 3.1男女生存比例 3.2男女生存数 3.3船舱级…

ROS学习笔记(11)进一步深入了解ROS第五步

0.前提 我在学习宾夕的ROS公开课的时候发现&#xff0c;外国的对计算机的教育和国内的是完全不一样的&#xff0c;当你接触了外国的课程后回头看自己学的会发现好像自己啥也没学。我这里可以放出来给大家看一下。 1.Python and C 2.Python PDB Tutorial&#xff1a;Python Deb…

PyTorch|构建自己的卷积神经网络

如何搭建网络&#xff0c;这在深度学习中非常重要。简单来讲&#xff0c;我们是要实现一个类&#xff0c;这个类中有属性和方法&#xff0c;能够进行计算。 一般来讲&#xff0c;使用PyTorch创建神经网络需要三步&#xff1a; 继承基类&#xff1a;nn.Module 定义层属性 实现…

动态规划(不同路径1,不同路径2,整数拆分)

62.不同路径 力扣题目链接(opens new window) 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。…

手机上连网络转接app,电脑连接手机,共用网络转接app的办法

方法一&#xff0c;&#xff08;不推荐&#xff09; 因为太简单了所以写一下 电脑安装MuMu模拟器&#xff0c;之后安装网络转接app&#xff0c;这个模拟器设置了从电脑上安装app和&#xff0c;安卓与电脑同步文件夹功能&#xff0c;实现文件共享。所以直接用就可以了。 方法二…

启动 Mac 时显示闪烁的问号

启动 Mac 时显示闪烁的问号 如果启动时在 Mac 屏幕上看到闪烁的问号&#xff0c;这意味着你的 Mac 无法找到自身的系统软件。 如果 Mac 启动时出现闪烁的问号且无法继续启动&#xff0c;请尝试以下步骤。 1.通过按住其电源按钮几秒钟来关闭 Mac。 2.按一下电源按钮&#xf…

你珍藏的那个表情包女孩,现在滤镜碎了一地。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文|猴哥聊娱乐 编辑|侯欢庭 七年前&#xff0c;一个年仅三岁的小女孩以其无邪的表情包风靡网络&#xff0…

FindMy技术用于键盘

键盘是我们生活中不可或缺的输入工具&#xff0c;是人与计算机之间沟通的桥梁&#xff0c;无论是编写文档、浏览网页、玩游戏、或是进行复杂的数据分析&#xff0c;键盘都在其中发挥着关键的作用。此外&#xff0c;键盘还是各种软件的快捷键操作的关键。通过熟练地运用快捷键&a…

大学物理-实验篇——测量误差与数据处理(测量分类、误差、有效数字、逐差法)

目录 测量分类 测量次数角度 测量条件角度 误差 误差分类 系统误差 随机误差 异常值 误差描述 精密度&#xff08;Precision&#xff09; 正确度&#xff08;Trueness&#xff09; 准确度/精确度&#xff08;Accuracy&#xff09; 随机误差的处理 直接测量 算术…