shell命令

一、shell是什么

shell有两种意思:

1.一个应用程序,这个程序提供了一个交互界面,用户通过交互界面输入指令,然后这个应用程序解释执行这些指令代码,继而访问系统。相当于中间人、解释器。

2.一种编程语言,用户在shell应用程序中输入的指令代码,就是要用这种语言编写。用这种语言编写的代码也叫做shell脚本。

shell应用程序与shell编程语言是一一对应的。

二、shell种类

这里shell指的是应用程序。

有多种shell:

1.Thompson shell(sh):

是历史上第一个shell,1971年由肯·汤普逊发布加入UNIX之中。一直用到第六版unix

2.bourne shell(sh):

是第七版Unix默认的shell,替代文件名同为sh的Thompson shell。它由Stephen Bourne在1977年发布的。

3.bourne again shell(bash):

Bash是Bourne shell的后继相容版本,它的名称来自的一个双关语(Bourne again / born again):Bourne-Again SHell。在1987年由布莱恩·福克斯为了GNU计划而编写。1989年发布第一个正式版本

4.c shell(csh):

由比尔·乔伊在BSD系统上开发。C shell脱胎于第六版Unix的/bin/sh。这种shell的语法类似于C语言。

5.tcsh:

是c shell的后继相容版本。它本质上是为c shell增加命令补完,命令编辑等其他功能。 目前作为FreeBSD和其延伸发行版的默认shell

6.korn shell(ksh):

是由大卫·科恩在1983年发布的shell。KornShell向后兼容Bourne shell,同时还添加了诸多C shell的功能。

7.z shell(zsh):

保罗·弗斯塔德(Paul Falstad)于1990年在普林斯顿大学求学时编写了Zsh的初版。

Zsh对Bourne shell做出了大量改进,同时加入了Bash、ksh及tcsh的某些功能。自2019年起,macOS的默认Shell已从Bash改为Zsh。

三、shell命令

shell命令就是一个函数或者程序。当在shell中输入一个命令,shell会调用这个函数或程序。

shell命令分为两种:

1.内置命令

2.外部命令

(一)内置命令

内置命令包含在shell本身里面。

当执行内置命令时,shell会直接执行该命令而无需调用其他程序。

1.查看所有bash内置命令

(1)使用help命令
help
(3)使用comgen命令:

compgen -b

2.查看特定内置命令信息
运行以下得到详细信息:

help <command>

3.判断一个命令是内部的(内置)还是外部的

(1)使用type命令

type -a <command-name-here>


(2)使用command命令

command -V ls

4.下面是所有内置命令:

名称旁边的星号 (*) 表示该命令被禁用。
. 文件名 [参数]
alias [-p] [名称[=值] ... ]
bg [任务说明符 ...]
bind [-lpvsPSVX] [-m 键映射] [-f 文件名] [-q 名称] [-u 名称] [>
break [n]
builtin [shell-内建 [参数 ...]]
caller [表达式]
cd [-L|[-P [-e]] [-@]] [目录]
command [-pVv] 命令 [参数 ...]
compgen [-abcdefgjksuv] [-o 选项] [-A 动作] [-G 全局模式] [-W>
complete [-abcdefgjksuv] [-pr] [-DEI] [-o 选项] [-A 动作] [-G>
compopt [-o|+o 选项] [-DEI] [名称 ...]
coproc [名称] 命令 [重定向]
declare [-aAfFgiIlnrtux] [名称[=值] ...] 或 declare -p [-aAfFi>
dirs [-clpv] [+N] [-N]
disown [-h] [-ar] [任务说明符 ... | pid ...]
echo [-neE] [参数 ...]
enable [-a] [-dnps] [-f 文件名] [名称 ...]
eval [参数 ...]
exec [-cl] [-a 名称] [命令 [参数 ...]] [重定向 ...]
exit [n]
export [-fn] [名称[=值] ...] 或 export -p
fc [-e 编辑器名] [-lnr] [起始] [终止] 或 fc -s [模式=替换串] >
fg [任务说明符]
getopts 选项字符串 名称 [参数 ...]
hash [-lr] [-p 路径名] [-dt] [名称 ...]
help [-dms] [模式 ...]
history [-c] [-d 偏移量] [n] 或 history -anrw [文件名] 或 his>
jobs [-lnprs] [任务说明符 ...] 或 jobs -x 命令 [参数]
kill [-s 信号说明符 | -n 信号编号 | -信号说明符] pid | 任务>
let 参数 [参数 ...]
logout [n]
mapfile [-d 分隔符] [-n 计数] [-O 起始] [-s 计数] [-t] [-u fd>
popd [-n] [+N | -N]
printf [-v var] 格式 [参数]
pushd [-n] [+N | -N | 目录]
pwd [-LP]
read [-ers] [-a 数组] [-d 分隔符] [-i 文本] [-n 字符数] [-N>
readarray [-d 分隔符] [-n 计数] [-O 起始] [-s 计数] [-t] [-u >
readonly [-aAf] [名称[=值] ...] 或 readonly -p
return [n]
set [-abefhkmnptuvxBCEHPT] [-o 选项名] [--] [-] [参数 ...]
shift [n]
shopt [-pqsu] [-o] [选项名 ...]
source 文件名 [参数]
suspend [-f]
time [-p] 流水线
times
trap [-lp] [[参数] 信号说明符 ...]
type [-afptP] 名称 [名称 ...]
typeset [-aAfFgiIlnrtux] 名称[=值] ... 或 typeset -p [-aAfFil>
ulimit [-SHabcdefiklmnpqrstuvxPRT] [限制]
umask [-p] [-S] [模式]
unalias [-a] 名称 [名称 ...]
unset [-f] [-v] [-n] [名称 ...]
variables - 一些 shell 变量的名称和含义
wait [-fn] [-p 变量] [id ...]
 

(二)外部命令

外部命令是一个单独的程序文件。

1.shell是如何调用外部命令的?

shell会把外部命令当成一个文件名,去文件系统查找这个文件并执行。

那么Shell要查找整个文件系统的所有目录吗?当然不是。shell定义了一个环境变量PATH,该变量就保存了Shell所有要查找的目录,如果在这些路径下找不到同名的文件,Shell 也不会再去其它路径下查找了,它会直接报错。

PATH变量包含的目录中几乎聚集了绝大多数的可执行文件,它们都是外部命令。

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

echo $PATH
/home/<username>/.local/bin:/home/<username>/bin:/usr/local/bin:/usr/bin:/bin
不同的目录之间以冒号:分隔。

(三)内置命令与外部命令的区别

通常来说,内置命令会比外部命令执行得更快,执行外部命令时不但会触发磁盘 I/O,还需要fork出一个单独的进程来执行,执行完成后再退出。而执行内置命令相当于调用当前Shell进程的一个函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值