Shell、Xshell以及两者的关系

编程语言分为编译型语言(需要使用编译器生成可执行的文件)和解释型语言(需要解释器,不需要编译器)。shell语言是一种解释型语言所使用的解释器有bash解释器或者sh解释器等。我们通过shell命令使之和操作系统交互,可以对操作系统起到保护作用,shell编程就是在一定的逻辑下将shell命令编写到shell脚本文件中,当执行脚本文件时,脚本文件中的命令会按照逻辑依次执行

同时shell也是一种应用程序,为用户提供操作界面,是用户与内核进行交互操作的接口

https://blog.csdn.net/so1125so/article/details/99199454

原文链接:https://blog.csdn.net/lbb88888888/article/details/102501784

对于linux初学者来说,应该都会接触到xshell这种工具和shell这个词语。那可能有人在想了,这两者有没有什么关系呢?事实上,这两者基本关系不大。

(1)shell

我们日常操作linux可以用两种方式,一种是可以直接通过linux命令行去直接操作;另一种是可以通过shell去进行操作。
那么shell是什么?shell是一个由C语言编写的程序,他相当于一个IDE开发环境,是这个环境是用c编程的,他用的是脚本语言,一些Linux命令集合,它的主要作用就是在用户和操作系统之间搭起一道桥梁(人机操作界面)。直接在命令行执行就是在当前的shell环境里执行,shell是命令行的人机界面。
但是我们通常所说的shell,其实指的是shell script(shell 脚本),shell也是一种命令式的脚本语言,它是面向过程的,与命令行的单一指令时一条一条的执行不同,shell脚本可以通过其条件、循环语句将命令集合在一起,执行的是一系列命令(命令集),从而形成一个面向过程的代码程序,实现一些复杂的功能。
所以说单纯的从原理来解析的话,shell只是一个程序,可以充当linux的人机界面;一门脚本语言,可以通过shell编写shell脚本,实现各个功能。Shell在实际开发中,一般指代的是shell脚本,shell脚本其实本质上也是linux命令,要注意区分shell脚本和命令行的异同。

(2)Xshell

Xshell是一个安全终端模拟软件,利用Xshell可以帮助我们通过互联网创建 本机到远程服务器(主机)的安全连接访问,从而帮助我们通过控制远程主机完成我们想要进行的操作。
比如我们可以通过租借云主机的形式搭建我们自己的小型集群进行各类项目实现,Xshell就可以满足我们在本机windows系统下远程操作那些云服务器。就是模拟服务器所在的linux,在xshell中可以输入命令,就像在服务器的linux中输入命令一样。一般用于远程连接。与secure CRT类似。xshell和secure CRT都可以用于模拟linux终端,现在我们一般用的是xshell。
扩展xshell的优点(部分):
1)分页环境
Xshell标签可以脱离原来的窗口并重新创建一个新窗口或重新连接一个完全不同的窗口。另外,单个的窗口可以垂直或水平分割,从而使一个窗口显示多个终端会话。
2)动态端口转发
系统管理员经常必须使用多个远程主机,并沉闷的一遍又一遍的执行重复的任务。使用新的同步输入重定向特性,所输入的东西能够同时发送到多个所选择的终端。
3)自定义键映射
终端密钥和文件菜单可以被映射到用户偏爱的键位,你甚至可以映射一个用来启动应用程序或脚本的键。

原文链接:https://blog.csdn.net/qq_40395874/article/details/116657002

1. 什么是 shell?

能操作应用程序的接口都能称为 shell。狭义上的 shell 指的是命令行方面的软件,如 sh、bash、csh 等。

2. 为什么要用 shell ?

shell 直译是壳的意思。管理计算机硬件的是操作系统的内核(Kernel),这个内核是需要被保护的,因为如果让用户随意操作,极有可能会让系统崩溃。而 shell 就是保护内核的“壳”,所以一般用户只能通过 shell 来和内核通信。

3. 既然有了图形界面的工具设置主机,为什么还要学习命令行界面的 shell?

a. 没有统一的图形界面,不同 distribution 设计的 X Window 都不相同,而 shell 则不一样,几乎各家 distribution 的 bash 都一样;b .远程管理命令行界面快;c. 如果想要将主机管理好,Shell 程序编写是一定需要的。

4. 都有那些 shell?

我们系统支持的合法的 shell 存储在 /etc/shells 文件中,可以通过 cat /etc/shells 将该文件打印在终端中。

5. 默认使用那个 shell?

既然有这么多 shell,那我们默认使用的是哪个 shell?当我们登录的时候系统就给我们一个 shell 来让我们工作了,这个登录时取得的 shell 记录在 /etc/passwd 文件中。可以看到默认使用的是 bash。

6. bash 的功能?

a. 命令记忆能力。
  b. 命令与文件补全功能(Tab 键)。
  c. 命令别名设置功能(alias)。
  e. 作业控制、前台、后台控制。
  f. 程序脚本。
  g. 通配符。

原文链接:https://blog.csdn.net/qxl_as/article/details/127337335

一、什么是shell?

在计算机中,Shell俗称壳(用来区别于核),Shell是Linux和Unix下的命令解析器。

用来为用户提供操作界面的软件(命令解析器)。
类似于DOS和Windows下的命令解析器:command.com、cmd.exe。

这个Shell(命令解析器)的作用: 用于接收用户命令,然后调用相应的应用程序。
(将用户输入的命令加以解释并传给Linux/Unix操作系统)

用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。

图片描述很好理解:
用户通过shell去控制操作系统去控制硬件。

在这里插入图片描述

二、shell脚本

关键词:批处理
区别于linux
如果我们的命令或者应用程序不在命令行直接执行,而是通过一个程序文件来执行时,这个程序就被称之为shell脚本。
这些内置在一个shell脚本中的命令通常是一次性执行完成,不会不停的返回信息给用户,这种通过文件执行脚本的方式称之为非交互方式。

三、shell命令和linux命令有什么区别

shell命令和linux命令的区别:1、shell是运行在Linux系统上的一个脚本语言,是一个用C语言编写的程序,而linux命令是对linux系统进行管理的命令;2、shell可以重复或批量地进行一些命令,也可以把重复执行的命令写到脚本里面执行,而linux命令需要一个一个的输入命令。
带尺寸的图片:

原文链接:https://blog.csdn.net/qq_45427600/article/details/113811053
一、来源
基本上shell分两大类:
1、图形界面shell(Graphical User Interface shell 即 GUI shell)
例如:应用最为广泛的 Windows Explorer (微软的windows系列操作系统),还有也包括广为人知的 Linux shell,其中linux shell 包括 X window manager (BlackBox和FluxBox),以及功能更强大的CDE、GNOME、KDE、 XFCE。
2、命令行式shell(Command Line Interface shell ,即CLI shell)
例如:
bash / sh / ksh / csh / zsh(Unix/linux 系统)

早期的计算机还没有图形化界面,只能通过命令行式的shell来进行用户和系统的交互。shell是一个命令解释器,这个过程分为交互式shell和非交互式shell。
建议查看shell的百度百科。

二、区别
windows系统下我们常用的是cmd命令,也就是:
在这里插入图片描述

现如今大多数电脑的操作系统都是windows,我们有时候需要去连接远程不同系统下的服务器时,需要用到Xshell,Xshell能帮助我们在windows系统下远程连接不同系统的服务器,从而达到控制终端的目的,Xshell最常用的功能就是可以查日志,如果代码出错,我们可以根据日志精准判断服务出错的位置在哪里。
在这里插入图片描述

原文链接:https://blog.csdn.net/weixin_60718941/article/details/126929205

一、shell命令以及运行原理
Linux 严格意义上说的是一个操作系统,我们称之为 “ 核心( kernel ) “ ,但我们一般用户,不能直接使用 kernel。 而是通过kernel 的 “ 外壳 ” 程序,也就是所谓的 shell ,来与 kernel 沟通。如何理解?为什么不能直接使用 kernel ?
从技术角度, Shell 的最简单定义:命令行解释器( command Interpreter )主要包含:
📈: 将使用者的命令翻译给核心(kernel)处理。
📉: 同时,将核心的处理结果翻译给使用者。
对比 windows GUI ,我们操作 windows 不是直接操作 windows 内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D 盘的操作,我们通常是双击 D 盘盘符 或者双击运行起来一个应用程序)。
shell 对于 Linux ,有相同的作用,主要是对我们的指令进行解析,解析指令给 Linux 内核。反馈结果在通过内核运行出结果,通过shell 解析给用户。
看完上面的一系列定义我想大家对shell的理解还有点迷迷糊糊的🤔shell有什么用?shell外壳的存在有什么意义??下面我们举个例子来深入理解一下:
在这里插入图片描述

📝:从前有个村子,村子里面有一个优秀的程序员叫做张三,张三除了长的不帅其他各方面都非常的优秀。他的父亲叫张老三,是村里的村长。张三家隔壁是如花家,如花长的十分漂亮😍,如花家的隔壁是李四家,李四也长的非常的帅气😋,人物已经设定好,故事要开始辣🤗
张老三:儿子啊,你看你整天敲代码,连个女朋友都没有,现在也老大不小了,该找个女朋友辣😤
张三: 哎呀,爸啊,不是你儿子不找啊,是嫩儿子我碰见女孩子都脸红,不咋会表达啊🙄
张老三: 呀,儿子你甭管了,你老爸我已经联系好村口的媒婆王婆了,让嫩王婆给你介绍,咋样啊😤
张三:心里嘀咕着:那怪美嘞,省嘞让俺说了。呀爸那可是中,爸啊我看隔壁如花可漂亮,你能不能隔王婆说说给如花介绍给我啊😍
张老三:中蛮,只要儿子喜欢,那爸肯定同意。
⭐重点来辣!!!!!!!!!
问:王婆存在的意义是什么?? | shell外壳存在的意义是什么??
答:降低找女朋友的成本。 | 降低操作os的成本。
张老三去找王婆,故事继续。。。。。
张老三: 王婆啊,你看我家张三也老大不小了,这小子喜欢我们隔壁家的如花姑娘,他比较害羞,也不善于表达,你去给他说说媒呗🤦🏽‍♂️
王婆一口答应了张老三,跑到了如花家🤗
王婆: 妮子啊,婆婆我今天过来是有事隔你说,今个嫩隔壁的张老三给我说他娃子张三看上你了,叫我过来说媒嘞!!!🤩人家张三现在可是大厂程序员,敲代码6的很,都是长嘞不是太排场,这你也知道,但是工资多啊,等他g了到时候财产咱俩73分,咋样??考虑考虑???😍😍😎
如花: 哎呀,王婆!!!!你给俺想成了啥人了安啊😅😅,俺会贪图他那些钱??我说这小子小的时候为啥总跟在我屁股后边原来是喜欢我,不都是会敲个代码蛮,装啥装?🙄你知道俺隔壁李四不知道??人家也是敲代码嘞,关键人家还在腾讯敲代码,张三算啥大厂??有腾讯大??哎呀,就算不说这,那人家李四不比他张三帅好几倍?回去告诉张三:姐姐我名花有主了!!男朋友腾讯的!!!!想得到我??让那小子别想了☺。
王婆屁颠屁颠又去了张老三家🤗。。。。
王婆: 村长啊,真不好意思,人家如花都有男朋友了,不中我给咱家三儿说个隔壁村的女孩子??🤔
张老三: 咋??看不上咱家这条件??好歹我也是个村长。名花有主咋啦?分了和咱家三儿结亲家!!
王婆: 呀,这东西不能强硬来啊,这多不美,人家既然都名花有主了,不中都让咱家三儿放弃吧🤐我去隔壁村给孩子找个更好的姑娘,肯定比如花排场!!!
⭐重点来辣!!!!!!!!!
问:这一次王婆存在的意义是什么? | shell外壳存在的意义是什么??
答:保护如花。 | 保护os系统
张三在角落里听到了父亲和王婆的对话,留下了悲伤的泪水🥺
王婆看到了张三留下了伤心的泪水,就凑到张三的耳边给张三说:三儿,甭伤心。人家如花说啊人家男朋友腾讯的!!!你俩都是敲代码的,你加把劲也进入腾讯到时候当他领导pua死他!!!加把劲,婆相信你能行!!!!如果实在找不到对象了那就new一个!!!哈哈哈,说罢王婆仰天大笑离开了。
张三悟了,他终于悟了那段话!!!: 心中无女人 敲码自然神
————————————————

Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。
Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。
Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的

前言
为什么要使用远程工具来控制liux呢?因为大部分liux主要是用来做服务器的,而在实际工作环境中,linux)服务器Q存在一个单独的机
房,所以常常需要使用远程工具来操作。并且操作也更加高效,方便。

前言
众所周知,计算机只能识别二进制机器语言,所以用户的指令对于计算机而言并不相通,即使是学会了安装LinuxQ系统也不懂得如何操
作,所以在此之前需要先学会如何与计算机进行“沟通”才是。
一、关于Xshell
Xshell是LiuX系统中运行的一种特殊程序,它处于用户和内核之间,也正因如此,操作Liux系统时需要Xshell充当一个“翻译官”的角色,
因为用户与计算机之间的语言并不相同,用户所说的命令需要通过shll程序进行解释并传递给系统内核执行。

Xshell是一款强大的模拟终端软件,也就是常说的远程连接服务器的工具,连接后其上可以运行shell命令。
Shell命令和Linux命令的关系?
Shell是Linux命令集的概称,是用户使用Linux系统的桥梁,通过shell实现对Linux系统的操作。

SSH为Secure Shell(安全外壳协议),建立在应用层上的协议,利用SSH协议可以有效防止远程管理过程中的信息泄露。

Bsah是shell的一种,都可以使用命令访问操作系统内核。
————————————————
版权声明:本文为CSDN博主「网络工程师小为」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/learner8/article/details/106122235

原文链接
https://www.cnblogs.com/The-explosion/articles/12336061.html

1、什么是shell和shell脚本

Shell 本身是一个用 C 语言编写的程序,是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统,它是用户使用 Linux 的桥梁,是UNIX/Linux系统的用户与操作系统之间的一种接口。
  Shell既是一种命令语言,又是一种程序设计语言(shell脚本)。它虽然不是 Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行。
  既是终端上的用户与UNIX/Linux操作系统交互的命令解释程序(shell命令),又是一种高级的命令程序设计语言(shell脚本)。
  作为命令解释程序,shell接收用户输入的命令语言,将命令翻译成一个动作序列,然后调用系统过程执行这条命令。
  作为命令程序设计语言,shell具有一般高级语言的许多特征,如变量定义、赋值、条件和循环语句等。用户可以利用SHELL的这些功能将多条命令组织成一个命令程序,以完成某种特定的任务。这个命令程序称为shell程序或shell过程。
  由于安全、复杂、繁琐等原因,用户不能直接接触内核(也没有必要),需要另外再开发一个程序,让用户直接使用这个程序;该程序的作用就是接收用户的操作(点击图标、输入命令),并进行简单的处理,然后再传递给内核,这样用户就能间接地使用操作系统内核了。你看,在用户和内核之间增加一层“代理”,既能简化用户的操作,又能保障内核的安全,何乐不为呢?

用户界面和命令行就是这个另外开发的程序,就是这层“代理”。在Linux下,这个命令行程序叫做shell。

Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。

Shell 本身并不是内核的一部分,它只是站在内核的基础上编写的一个应用程序,它和 QQ、迅雷、Firefox 等其它软件没有什么区别。然而 Shell 也有着它的特殊性,就是开机立马启动,并呈现在用户面前;用户通过 Shell 来使用 Linux,不启动 Shell 的话,用户就没办法使用 Linux。

2、shell命令与图形界面的区别

对于图形界面,用户点击某个图标就能启动某个程序;对于命令行,用户输入某个程序的名字(可以看做一个命令)就能启动某个程序。这两者的基本过程都是类似的,都需要查找程序在硬盘上的安装位置,然后将它们加载到内存运行。

换句话说,图形界面和命令行要达到的目的是一样的,都是让用户控制计算机。

真正能够控制计算机硬件(CPU、内存、显示器等)的只有操作系统内核(Kernel),图形界面和命令行只是架设在用户和内核之间的一座桥梁。

3、Shell是如何连接用户和内核的

Shell 程序本身的功能是很弱的,比如文件操作、输入输出、进程管理等都得依赖内核。我们运行一个命令,大部分情况下 Shell 都会去调用内核暴露出来的接口,这就是在使用内核,只是这个过程被 Shell 隐藏了起来,它自己在背后默默进行,我们看不到而已。而接口其实就是一个一个的函数,使用内核就是调用这些函数。这就是使用内核的全部内容了吗?嗯,是的!除了函数,你没有别的途径使用内核。

比如,我们都知道在 Shell 中输入cat test.txt命令就可以查看 test.txt 文件中的内容,然而,test.txt 放在磁盘的哪个位置?分成了几个数据块?在哪里开始?在哪里终止?如何操作探头读取它?这些底层细节 Shell 统统不知道的,它只能去调用内核提供的 open() 和 read() 函数,告诉内核我要读取 log.txt 文件,请帮助我,然后内核就乖乖地按照 Shell 的吩咐去读取文件了,并将读取到的文件内容交给 Shell,最后再由 Shell 呈现给用户(其实呈现到显示器上还得依赖内核)。整个过程中 Shell 就是一个“中间商”,它在用户和内核之间“倒卖”数据,只是用户不知道罢了。

4、shell的分类

Shell 是一个程序,一般都是放在/bin或者/usr/bin目录下(如下图中的bash),当前 Linux 系统可用的 Shell 都记录在/etc/shells文件中。/etc/shells是一个纯文本文件,你可以在图形界面下打开它,也可以使用 cat 命令查看它。
在这里插入图片描述

通过 cat 命令来查看当前 Linux 系统的可用 Shell:

在这里插入图片描述

在现代的 Linux 上,sh 已经被 bash 代替,/bin/sh往往是指向/bin/bash的符号链接。

如果你希望查看当前 Linux 的默认 Shell,那么可以输出 SHELL 环境变量:

在这里插入图片描述

输出结果表明默认的 Shell 是 bash。

echo是一个 Shell 命令,用来输出变量的值。SHELL是 Linux 系统中的环境变量,它指明了当前使用的 Shell 程序的位置,也就是使用的哪个 Shell。

不同的shell具备不同的功能,shell还决定了Linux中默认的shell是/bin/bash,流行的shell有sh、ash、bash、csh、tcsh、ksh、zsh等,不同的shell都有自己的特点以及用途。

(1)sh

sh 的全称是 Bourne shell,由 AT&T 公司的 Steve Bourne开发,为了纪念他,就用他的名字命名了。

sh 是 UNIX 上的标准 shell,很多 UNIX 版本都配有 sh。sh 是第一个流行的 Shell。

(2)csh

sh 之后另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计的,这个 shell 的语法有点类似C语言,所以才得名为 C shell ,简称为 csh。

Bill Joy 是一个风云人物,他创立了 BSD 操作系统,开发了 vi 编辑器,还是 Sun 公司的创始人之一。

BSD 是 UNIX 的一个重要分支,后人在此基础上发展出了很多现代的操作系统,最著名的有 FreeBSD、OpenBSD 和 NetBSD,就连 Mac OS X 在很大程度上也基于BSD。

(3)tcsh

tcsh 是 csh 的增强版,加入了命令补全功能,提供了更加强大的语法支持。

(4)ash

一个简单的轻量级的 Shell,占用资源少,适合运行于低内存环境,但是与下面讲到的 bash shell 完全兼容。

(5)bash

bash shell 是 Linux 的默认 shell,本教程也基于 bash 编写。bash 由 GNU 组织开发,保持了对 sh shell 的兼容性,是各种 Linux 发行版默认配置的 shell。bash 兼容 sh 意味着,针对 sh 编写的 Shell 代码可以不加修改地在 bash 中运行。

尽管如此,bash 和 sh 还是有一些不同之处:一方面,bash 扩展了一些命令和参数;另一方面,bash 并不完全和 sh 兼容,它们有些行为并不一致,但在大多数企业运维的情况下区别不大,特殊场景可以使用 bash 代替 sh。

5、进入shell的两种方式

在 Linux 发展的早期,唯一能用的工具就是 Shell,Linux 用户都是在 Shell 中输入文本命令,并查看文本输出;如果有必要的话,Shell 也能显示一些基本的图形。而如今 Linux 的环境已经完全不同,几乎所有的 Linux 发行版都使用某种图形桌面环境(例如 GNOME、KDE、Unity 等),这使得原生的 Shell 入口被隐藏了,进入 Shell 仿佛变得困难起来。

(1)进入 Linux 控制台

一种进入 Shell 的方法是让 Linux 系统退出图形界面模式,进入控制台模式,这样一来,显示器上只有一个简单的带着白色文字的“黑屏”,就像图形界面出现之前的样子。这种模式称为 Linux 控制台(Console)。

现代 Linux 系统在启动时会自动创建几个虚拟控制台(Virtual Console),其中一个供图形桌面程序使用,其他的保留原生控制台的样子。虚拟控制台其实就是 Linux 系统内存中运行的虚拟终端(Virtual Terminal)。

从图形界面模式进入控制台模式也很简单,往往按下Ctrl + Alt + Fn(n=1,2,3,4,5…)快捷键就能够来回切换。

uabntu在启动时会创建7个虚拟控制台,按下crtl+alt+fn(n=17)可以来回切换,16为控制台模式,,7为图形界面模式。

centos在启动时会创建6个虚拟控制台,按下crtl+alt+fn(n=16)可以来回切换,26为控制台模式,1为图形界面模式。

下图就是进入了控制台模式:
在这里插入图片描述

输入用户名和密码,登录成功后就可以进入 Shell 了。$是命令提示符,我们可以在它后面输入 Shell 命令。

图形界面也是一个程序,会占用 CPU 时间和内存空间,当 Linux 作为服务器系统时,安装调试完毕后,应该让 Linux 运行在控制台模式下,以节省服务器资源。正是由于这个原因,很多服务器甚至不安装图形界面程序,管理员只能使用命令来完成各项操作。

(2)使用终端

进入 Shell 的另外一种方法是使用linux桌面环境中的终端模拟包(Terminal emulation package),也就是我们常说的终端(Terminal),这样在图形桌面中就可以使用 Shell。

在这里插入图片描述

命令提示符的格式不是固定的,用户可以根据自己的喜好来修改,Shell 通过PS1和PS2这两个环境变量来控制提示符的格式,修改PS1和PS2的值就能修改命令提示符的格式。

PS1 控制最外层的命令提示符格式,PS2 控制第二层的命令提示符格式。

在修改 PS1 和 PS2 之前,我们先用 echo 命令输出它们的值,看看默认情况下是什么样子的:

Linux 使用以\为前导的特殊字符来表示命令提示符中包含的要素,这使得 PS1 和 PS2 的格式看起来可能有点奇怪。下表展示了可以在 PS1 和 PS2 中使用的特殊字符。

如果命令在第一行没有输入完,按回车键时会显示命令提示符“<”,表示命令没有输入完,继续输入

6、shell命令

在 Shell 中输入的命令,有一部分是 Shell 本身自带的,这叫做内置命令;有一部分是其它的应用程序(一个程序就是一个命令),这叫做外部命令。

Shell 本身支持的命令并不多,功能也有限,但是 Shell 可以调用其他的程序,每个程序就是一个命令,这使得 Shell 命令的数量可以无限扩展,其结果就是 Shell 的功能非常强大,完全能够胜任 Linux 的日常管理工作,如文本或字符串检索、文件的查找或创建、大规模软件的自动部署、更改系统设置、监控服务器性能、发送报警邮件、抓取网页内容、压缩文件等。

更加惊讶的是,Shell 还可以让多个外部程序发生连接,在它们之间很方便地传递数据,也就是把一个程序的输出结果传递给另一个程序作为输入。

大家所说的 Shell 强大,并不是 Shell 本身功能丰富,而是它擅长使用和组织其他的程序。Shell 就是一个领导者,这正是 Shell 的魅力所在。

可以将 Shell 在整个 Linux 系统中的地位描述成下图所示的样子。注意“用户”和“其它应用程序”是通过虚线连接的,因为用户启动 Linux 后直接面对的是 Shell,通过 Shell 才能运行其它的应用程序。

在这里插入图片描述

(1)Shell 命令分为两种

Shell 自带的命令称为内置命令,内置命令的本质是一个内部函数,执行内置命令就是调用这个自带的函数。因为这些内置命令所对应的函数代码在 Shell 启动时已经被加载到内存了,所以内置命令的执行速度很快。

Shell 外部命令的本质是一个应用程序,执行外部命令就是启动一个新的应用程序。因为外部命令要创建新的进程并加载应用程序的代码,所以外部命令的执行速度很慢。

用户输入一个命令后,Shell 先检测该命令是不是内置命令,如果是就执行,如果不是就检测有没有对应的外部程序:有的话就转而执行外部程序,执行结束后再回到 Shell;没有的话就报错,告诉用户该命令不存在。

内置命令后面附带的所有数据(所有选项和参数)最终都以参数的形式传递给了函数,外部命令后面附带的所有数据(所有选项和参数)最终都以参数的形式传递给了应用程序。

不管是内置命令还是外部命令,它后面附带的数据最终都以参数的形式传递给了函数。实现一个命令的一项重要工作就是解析传递给函数的参数。

shell是一个程序,/bin目录下的bash就是ubantu下默认的shell,在终端上输入命令(命令[选项][参数]),bash程序就会根据命令执行对应的函数,而编写.sh文件就相当于将多个命令连续执行。

A、内置命令(ls、cd等)-----对应bash程序内部的函数

shell 命令的基本格式:command [选项] [参数]

[]表示可选的,也就是可有可无。有些命令不写选项和参数也能执行,有些命令在必要的时候可以附带选项和参数。

有些命令有些时候可以不带选项和参数,有些命令有些时候必须要带选项和参数。

ls -l:-l就表示ls命令的选项
      cd code:code就是cd命令的参数,表示进入code目录
      echo -n “how are you”:-n就是echo命令的选项,表示输出字符串后不换行,“how are you”就表示参数

内置命令后面的选项和参数都是以空格分开的,空格分开几部分就表示几个参数,命令不属于参数,命令就相当于对应的函数,选项和参数就相当于函数中的参数。

并且,命令后面附带的数据都是“原汁原味”地传递给了函数,比如ls -l要传递的参数分别是 -l,减号-也会一起传递过去,在函数内部,减号-可以用来区分该参数是否是命令的选项。

内置命令不宜过多,过多的内置命令会导致 Shell 程序本身体积膨胀,运行 Shell 程序后就会占用更多的内存。Shell 是一个常驻内存的程序,占用过多内存会影响其它的程序。

只有那些最常用的命令才有理由成为内置命令,比如 cd、kill、echo 等;你可以转到《Shell内置命令》来了解所有的内置命令,以及如何判断一个命令是否是内置命令。

常用的命令为使用shell界面开发用户程序必须用到的命令,大致可以分成五大类:

(1)文件管理类:cd,chmod,chown,chgrp,comm,cp,crypt,diff,file,find,In,ls,mkdir,mv,cd,pr,pwd,mv,mvdir。

(2)进程管理类:at,kill,mail,nice,nohup,ps,time,write,mesg。

(3)文本加工类:cat,crypt,grep,norff,unlq,WC、sort,spell,tail,troff。

(4)软件开发类:CC,f77,login,logout,size,yacc,vi,emacs,dbx、lex,make,lint,ld。

(5)系统维护类。date,man,passwd,stty、tty,who等。

B、外部命令(执行其它程序)------bash外部的程序

外部命令可能是读者比较疑惑的,一个外部的应用程序究竟是如何变成一个 Shell 命令的呢?

应用程序就是一个文件,只不过这个文件是可以执行的。既然是文件,那么它就有一个名字,并且存放在文件系统中。

用户在 Shell 中输入一个外部命令后,只是将可执行文件的名字告诉了 Shell,但是并没有告诉 Shell 去哪里寻找这个文件。难道 Shell 要遍历整个文件系统,查看每个目录吗?这显然是不能实现的。

为了解决这个问题,Shell 在启动文件中增加了一个叫做 PATH 的环境变量,该变量就保存了 Shell 对外部命令的查找路径,如果在这些路径下找不到同名的文件,Shell 也不会再去其它路径下查找了,它就直接报错。

我们使用 echo 命令输出 PATH 变量的值,看看它保存了哪些检索路径:

在这里插入图片描述

不同的路径之间以:分隔。根据上图可知,Shell 只会在几个固定的路径中查找外部命令。

所以将编译生成后的可执行文件放入外部命令路径,比如放入/use/local/bin/中,就可以直接按命令执行。

7、shell过程

一个shell过程是由能执行一个特定任务的一条或多条命令组成的。shell过程本身就是一个文件,通过系统中的编辑工具(如vi等)产生。与其他文件不同的是,它不需要编译就可以执行。

shell过程在调用时可以带参数,这种参数称为命令行参数,它们与shell过程中的位置参数($1,$2,…,$9)相对应。如:shcmd X Y Z

则shell过程shcmd中的位置参数$1对应命令行参数“X”,$2对应“Y”,$3 对应“Z”。

8、Shell脚本语言

Shell 脚本(shell script),是一种为 shell 编写的脚本程序。业界所说的 shell 通常都是指 shell 脚本,但是要知道,shell 和 shell script 是两个不同的概念。“shell编程” 都是指 shell 脚本编程,不是指开发 shell 自身。

有的编程语言,如 C/C++、Pascal、Go语言、汇编等,必须在程序运行之前将所有代码都翻译成二进制形式,也就是生成可执行文件,用户拿到的是最终生成的可执行文件,看不到源码。这个过程叫做编译(Compile),这样的编程语言叫做编译型语言,完成编译过程的软件叫做编译器(Compiler)。

而有的编程语言,如 Shell、JavaScript、Python、PHP等,需要一边执行一边翻译,不会生成任何可执行文件,用户必须拿到源码才能运行程序。程序运行后会即时翻译,翻译完一部分执行一部分,不用等到所有代码都翻译完。这个过程叫做解释,这样的编程语言叫做解释型语言或者脚本语言(Script),完成解释过程的软件叫做解释器。

编译型语言的优点是执行速度快、对硬件要求低、保密性好,适合开发操作系统、大型应用程序、数据库等。脚本语言的优点是使用灵活、部署容易、跨平台性好,非常适合 Web 开发以及小工具的制作。

Shell 编程语言就是一种脚本语言,我们编写完源码后不用编译,直接运行源码即可。

9、shell变量

Shell提供了四类字符串变量,它们是:

(1)位置变量

如$0,$1,…,$9等,其中$0为shell过程名,$1到$9分别为过程名后的参数。

(2)用户定义的变量

变量名由字母、数字等组成,变量的值为字符串。变量通过赋值语句进行定义。在SHELL过程中,通过“$变量名”的方式来引用变量的值。

(3)专用变量

这些变量对于SHELL具有特殊的含义。如变量HOME被初始化为用户的登录目录,PATH为shell查找命令时所使用的查找路径等。这些变量的值可以直接在shell过程中引用,也可以由用户重新定义。

(4)预定义变量

这些变量具有特殊的含义,用户在程序中只能引用,而不能对它们进行修改。如$#记录传送给shell过程的参数个数,它不包括$0

10、Shell脚本编程

Shell 虽然没有 C++、Java、Python 等强大,但也支持了基本的编程元素,例如:

if…else 选择结构,case…in 开关语句,for、while、until 循环;
    变量、数组、字符串、注释、加减乘除、逻辑运算等概念;
    函数,包括用户自定义的函数和内置函数(例如 printf、export、eval 等)。

站在这个角度讲,Shell 也是一种编程语言,它的编译器(解释器)是 Shell 这个程序。我们平时所说的 Shell,有时候是指连接用户和内核的这个程序,有时候又是指 Shell 编程。

Shell 主要用来开发一些实用的、自动化的小工具,而不是用来开发具有复杂业务逻辑的中大型软件,例如检测计算机的硬件参数、搭建 Web 运行环境、日志分析等,Shell 都非常合适。

使用 Shell的熟练程度反映了用户对 Linux 的掌握程度,运维工程师、网络管理员、程序员都应该学习 Shell。

尤其是 Linux 运维工程师,Shell 更是必不可少的,是必须掌握的技能,它使得我们能够自动化地管理服务器集群,否则你就得一个一个地登录所有的服务器,对每一台服务器都进行相同的设置,而这些服务器可能有成百上千之多,会浪费大量的时间在重复性的工作上。

使用vim编辑器打开后缀名为.sh的文件,.sh表示shell脚本文件,如下图所示:

在这里插入图片描述

#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell;后面的/bin/bash就是指明了解释器的具体位置。

Shell 脚本中所有以#开头的都是注释(当然以#!开头的除外)。

在新进程中运行 Shell 脚本有多种方法:

(1)将 Shell 脚本作为程序运行

Shell 脚本也是一种解释执行的程序,可以在终端直接调用(需要使用 chmod 命令给 Shell 脚本加上执行权限),如下所示:

在这里插入图片描述

chmod +x表示给 test.sh 增加执行权限。./表示当前目录,整条命令的意思是执行当前目录下的 test.sh 脚本。如果不写./,Linux 会到系统路径(由 PATH 环境变量指定)下查找 test1.sh,而系统路径下显然不存在这个脚本,所以会执行失败。
  通过这种方式运行脚本,脚本文件第一行的#!/bin/bash一定要写对,好让系统查找到正确的解释器。

(2)将 Shell 脚本作为参数传递给 Bash 解释器

直接运行 Bash 解释器,将脚本文件的名字作为参数传递给 Bash,通过这种方式运行脚本,不需要在脚本文件的第一行指定解释器信息,写了也没用。如下所示:
在这里插入图片描述

更加简洁的写法是运行 bash 命令。bash 是一个外部命令,Shell 会在 /bin 目录中找到对应的应用程序,也即 /bin/bash。如下图所示:

在这里插入图片描述

这两种写法在本质上是一样的:第一种写法给出了绝对路径,会直接运行 Bash 解释器;第二种写法通过 bash 命令找到 Bash 解释器所在的目录,然后再运行,只不过多了一个查找的过程而已。

在当前进程中运行shell:

这里需要引入一个新的命令——source 命令。source 是 Shell 内置命令的一种,它会读取脚本文件中的代码,并依次执行所有语句。你也可以理解为,source 命令会强制执行脚本文件中的全部命令,而忽略脚本文件的权限。
  source 命令的用法为:source filename

也可以简写为:. filename(注意:点后面有空格)

两种写法的效果相同。使用 source 命令不用给脚本增加执行权限,并且写不写./都行,对于第二种写法,注意点号.和文件名中间有一个空格。
在这里插入图片描述

11、shell的四种运行方式(启动方式)
  Shell 是一个应用程序,它的一端连接着 Linux 内核,另一端连接着用户。Shell 是用户和 Linux 系统沟通的桥梁,我们都是通过 Shell 来管理 Linux 系统。

我们可以直接使用 Shell,也可以输入用户名和密码后再使用 Shell;第一种叫做非登录式,第二种叫做登录式。

我们可以在 Shell 中一个个地输入命令并及时查看它们的输出结果,整个过程都在跟 Shell 不停地互动,这叫做交互式。我们也可以运行一个 Shell 脚本文件,让所有命令批量化、一次性地执行,这叫做非交互式。
  总起来说,Shell 一共有四种运行方式:交互式的登录 Shell;交互式的非登录 Shell;非交互式的登录 Shell;非交互式的非登录 Shell。

判断shell是否为交互式有两种方法:

(1)查看变量-的值,如果值中包含了字母i,则表示交互式(interactive)。
在这里插入图片描述

(2) 查看变量PS1的值,如果非空,则为交互式,否则为非交互式,因为非交互式会清空该变量。

在这里插入图片描述

判断 Shell 是否为登录式:

判断 Shell 是否为登录式也非常简单,只需执行shopt login_shell即可,值为on表示为登录式,off为非登录式。

shopt 命令用来查看或设置 Shell 中的行为选项,这些选项可以增强 Shell 的易用性。

在这里插入图片描述

同时判断交互式、登录式:

要同时判断是否为交互式和登录式,可以简单使用如下的命令:echo $PS1; shopt login_shell或者echo $-; shopt login_shell
在这里插入图片描述

常见的 Shell 启动方式

(1) 通过 Linux 控制台(不是桌面环境自带的终端)或者 ssh 登录 Shell 时(这才是正常登录方式),为交互式的登录 Shell。

在这里插入图片描述

(2)执行 bash 命令时默认是非登录的,增加–login选项(简写为-l)后变成登录式。

在这里插入图片描述
在这里插入图片描述

(3)使用由()包围的组命令或者命令替换进入子 Shell 时,子 Shell 会继承父 Shell 的交互和登录属性。

在这里插入图片描述

(4) ssh 执行远程命令,但不登录时,为非交互非登录式。
  $ ssh localhost ‘echo $PS1;shopt login_shell’
  login_shell off

(5)在 Linux 桌面环境下打开终端时,为交互式的非登录 Shell。

在这里插入图片描述

12、shell配置文件

无论是否是交互式,是否是登录式,Bash Shell 在启动时总要配置其运行环境,例如初始化环境变量、设置命令提示符、指定系统命令路径等。这个过程是通过加载一系列配置文件完成的,这些配置文件其实就是 Shell 脚本文件。

与 Bash Shell 有关的配置文件主要有 /etc/profile、/.bash_profile、/.bash_login、/.profile、/.bashrc、/etc/bashrc、/etc/profile.d/*.sh,不同的启动方式会加载不同的配置文件。

~表示用户主目录。是通配符,/etc/profile.d/.sh 表示 /etc/profile.d/ 目录下所有的脚本文件(以.sh结尾的文件)。

登录式的 Shell

Bash 官方文档说:如果是登录式的 Shell,首先会读取和执行 /etc/profiles,这是所有用户的全局配置文件,接着会到用户主目录中寻找 /.bash_profile、/.bash_login 或者 ~/.profile,它们都是用户个人的配置文件。

不同的 Linux 发行版附带的个人配置文件也不同,有的可能只有其中一个,有的可能三者都有。

如果三个文件同时存在的话,到底应该加载哪一个呢?它们的优先级顺序是 ~/.bash_profile > ~/.bash_login > ~/.profile。

如果 ~/.bash_profile 存在,那么一切以该文件为准,并且到此结束,不再加载其它的配置文件。

如果 ~/.bash_profile 不存在,那么尝试加载 /.bash_login。/.bash_login 存在的话就到此结束,不存在的话就加载 ~/.profile。

注意,/etc/profiles 文件还会嵌套加载 /etc/profile.d/*.sh。
  同样,~/.bash_profile 也使用类似的方式加载 ~/.bashrc。

非登录的 Shell

如果以非登录的方式启动 Shell,那么就不会读取以上所说的配置文件,而是直接读取 ~/.bashrc。

~/.bashrc 文件还会嵌套加载 /etc/bashrc,请看下面的代码.

Xshell5的使用

Xshell5上新建一个回话在这里插入图片描述
连接成功,可以在Xshell5中操作自己的Linux系统
在这里插入图片描述

1,shell命令不是c语言——尽管shell本身和你输入的命令(如ls)绝大多数都是c语言完成的。单个shell命令也算不上脚本语言,硬要算的话,勉强算单行的脚本语言吧。
2,脚本语言都是纯文本格式,解释器(一个可执行程序)读取它,解释并执行其中的代码。多个shell命令可以组合起来,形成shell脚本,由shell负责解释执行。shell脚本具有函数,控制结构等编程语言的基本要素,因此写shell脚本也算一种编程,但是相对更简单。
3,shell脚本一般是利用系统里现有的可执行程序,组合起来完成一些任务,c语言则不同,c语言可以完成任何事情,包括shell本身。
4,c语言要难得多,即使是ls(列目录)这样的基础程序,也不是初学者可以顺利完成的(我的意思是说,ls -h列出帮助,然后完成所有的命令选项,而不是仅仅列出当前目录的内容)。

什么是SSH协议?

SSH又称为“安全外壳协议”(Secure Shell),是一种加密的网络传输协议,提供了一个在网络中安全地远程连接到其他计算机和设备的
方法。SSH协议通过使用加密技术创建安全的隧道,保障了数据在传输过程中的安全性和完整性。
在互联网通信时代的初期,通信内容都是明文传输,一旦被黑客等恶意人员截获,其中的敏感信息将会被窃取。使用$SH协议可以避免这
种窃取问题,提高网络安全性。

Shell和Xshell区别

一个脚本,一个软件
xshell是远程的,只是一个连接工具。连接后,可以运行远程机器的shell程序。
四、xshell和shell有什么区别?
xshell是windows下面一款非常强大的远程管理工具,它支持像SSH、Telnet、SFTP等各种协议,可以非常方便的让我们在windows下面直接对Linux服务器进行远程控制和管理,
而shell它其实是Linux下面的一种命令语言,也是一种编程语言,那么像我们在it行业内通常说的这个shell其实就是我们用shell语言来编写shell脚本,所以xshell和shell是完全不一样的两个东西。

Shel是一种命令行解释器,它是操作系统与用户之间的接口,用户可以通过Shell来执行各种命令和程序。Shel可以解释用户输入的命
令,并将其转换成操作系统可以理解的语言,然后执行相应的操作。

shell入门
编写规范:
1、代码规范
#!/bin/bash //指定告之系统当前这个脚本要使用的shell解释器
Shell 相关指令

2、文件命名规范
文件名.sh

使用流程
1、创建.sh文件
2、编写shell代码
3、执行shell脚本

首先我们知道.sh其实就是shell,是一个C语言编写的程序语言,它可以用于在Linux上编程。Shell 既是一种命令语言,又是一种程序设计语言。
bash是sh的扩展升级。

创建bash脚本:
下面是我的HelloWorld脚本文件
#!/bin/bash
echo “Hello World !”
#! 会告诉系统,其后路径所指定的程序是解释此脚本的 Shell ,这里是bash。

运行shell脚本
1.将其作为可执行程序
将上述脚本保存为test.sh,并cd到它的目录
chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
注意一定要在脚本前写上"./ ",告诉系统就在当前的目录找。

2.作为解释器参数
/bin/sh test.sh

/bin/php test.php

.h文件

https://blog.csdn.net/a_piece_of_ppx/article/details/124929728
https://blog.csdn.net/qq_38858247/article/details/85332394
https://blog.csdn.net/weixin_34034295/article/details/116835596

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不熬夜,早点睡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值