㈠ linux下的shell是什么
什么是shell
shell是用户和Linux
操作系统
之间的
接口
。Linux中有多种shell,其中缺省使用的是Bash。本章讲述了shell的工作原理,shell的种类,shell的一般操作及Bash的
特性
。
什么是shell
Linux系统的shell作为操作系统的
外壳
,为用户提供使用操作系统的接口。它是
命令语言
、命令
解释程序
及
程序设计语言
的统称。
shell是用户和
Linux内核
之间的接口
程序
,如果把Linux内核想象成一个
球体
的中心,shell就是围绕
内核
的外层。当从shell或其他程序向Linux传递命令时,内核会做出相应的反应。
shell是一个命令语言
解释器
,它拥有自己内建的shell命令集,shell也能被系统中其他
应用程序
所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。
Shell是一种具备
特殊功能
的程序,
它是介于使用者和
UNIX/linux
操作系统之核心
程序(kernel)间的一个接口。为什么我们说
shell
是一种介于系统核心程序与使用者
间的中介者呢?读过操作系统概论的读者们都知道操作系统是一个
系统资源
的管理者与分
配者,当您有需求时,您得向系统提出;从操作系统的角度来看,它也必须防止使用者因
为错误的操作而造成系统的伤害?众所周知,对
计算机
下命令得透过命令(command)
或
是程序(program);程序有编译器(compiler)将程序转为
二进制代码
,可是命令呢?
其实shell
也是一支程序,它由
输入设备
读取命令,再将其转为计算机可以了解的机械码,
然后执行它。
各种操作系统都有它自己的
shell,以
DOS
为例,它的
shell
就是
command.com文
件。如同
DOS
下有
NDOS,4DOS,DRDOS
等不同的命令解译程序可以取代标准的
command.com
,UNIX
下除了
Bourne
shell(/bin/sh)
外还有
C
shell(/bin/csh)、
Korn
shell(/bin/ksh)、Bourne
again
shell(/bin/bash)、Tenex
C
shell(tcsh)
等其它的
shell。UNIX/linux将
shell
独立于核心程序之外,
使得它就如同一般的应用
程序,
可以在不影响操作系统本身的情况下进行修改、更新版本或是添加新的功能。
有一些命令,比如改变工作目录命令cd,是包含在shell
内部
的。还有一些命令,例如
拷贝
命令cp和移动命令rm,是存在于
文件系统
中某个目录下的单独的程序。对用户而言,不必关心一个命令是建立在shell内部还是一个单独的程序。
shell首先检查命令是否是
内部命令
,若不是再检查是否是一个应用程序(这里的应用程序可以是Linux本身的
实用程序
,如ls和rm,也可以是购买的商业程序,如xv,或者是
自由软件
,如emacs)。然后shell在搜索
路径
里寻找这些应用程序(搜索路径就是一个能找到可执行程序的目录列表)。如果键入的命令不是一个内部命令并且在路径里没有找到这个
可执行文件
,将会显示一条错误信息。如果能够成功找到命令,该内部命令或应用程序将被分解为
系统调用
并传给Linux内核。
shell的另一个重要特性是它自身就是一个解释型的程序设计语言,shell程序设计语言支持绝大多数在
高级语言
中能见到的程序
元素
,如
函数
、
变量
、
数组
和程序控制结构。shell
编程语言
简单易学,任何在提示符中能键入的命令都能放到一个可执行的shell程序中。
当普通用户成功登录,系统将执行一个称为shell的程序。正是shell进程提供了命令行提示符。作为默认值(TurboLinux系统默认的shell是BASH),对普通用户用“$”作提示符,对超级用户(root)用“#”作提示符。
一旦出现了shell提示符,就可以键入
命令名称
及命令所需要的
参数
。shell将执行这些命令。如果一条命令花费了很长的时间来运行,或者在屏幕上产生了大量的输出,可以从
键盘
上按ctrl+c发出中断
信号
来中断它(在正常结束之前,中止它的执行)。
当用户准备结束登录对话进程时,可以键入logout命令、exit命令或文件结束符(EOF)(按ctrl+d实现),结束登录。
㈡ shell脚本中的$*,$@和$#分别是什么意思
举例说:
脚本名称叫test.sh 入参三个: 1 2 3
运行test.sh 1 2 3后
$*为"1 2 3"(一起被引号包住)
$@为"1" "2" "3"(分别被包住)
$#为3(参数数量)凯姿毁
wc(wordcount)
功能说明:计算字数。
语法:wc[-clw][--help][--version][文件...]
补充说明:利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为“-”,则wc指盯备令会从标准输入设备读取数据。
参数:
-c或--bytes或--chars只显示Bytes数。
-l或--lines只显示列数。
-w或--words只显示字数。
--help在线帮助。
--version显示版本信息。
取调用脚本时第三个参数的前12个字符组成的子串
$3表示第三个参数,${3:0:12}表示从第三个参数第0个字符开始取12个字符
看你问了几次类似的问题,干脆总结一下吧。
这些都是makefile的内建命令,含义如下:
$@ target
$% file name of an archive member
$< first prerequisite
$? prerequisites newer than target
$^ prerequisites
$+ similar to $^, including plicates
$* stem of the target filename
下面是这些字符及其含义:
Backspace
c显示后册消不换行
f在终端上屏幕的开始处显示
换行
回车
制表符
v垂直制表符
反斜框
nnn 用1,2或3位8进制整数表示一个ASCII码字符
例子:
echo-e"a b"
输出的就是ab,a与b中间的空位就是水平制表(制表符)。
推荐参考书籍:Shell脚本学习指南
在Unix/Linux里面执行的程式打印到银幕上有两个不同的路泾,一个是stdout(standard output),另一个是stderr(standard error)。这两者虽然平时都同样的显示在屏幕上,但是如果你想把他们存入文件档案里时,他们可以单独的存入不同的文档,例如:
# 把 programA 执行结果的 stdout 存入 A.out 文档
# 也把所有的 stderr 存入 A.err 文档里面:
$ programA >A.out 2>A.err
# 在上面这个例子里,2 代表的是程序 programA 它的 stderr 输出路径
# 下面这个例子里,是把 stderr 汇流到 stdout 里面:
programA >A.out2 2>&1
# 上面执行的结果是 both stderr 和 stdout 通通存档到 A.out2 文档
$+数字 一般是位置参数的用法。
如果运行脚本的时候带参数,那么可以在脚本里通过 $1 获取第一个参数,$2 获取第二个参数......依此类推,一共可以直接获取9个参数(称为位置参数)。$0用于获取脚本名称。
. $1中的点是执行的意思。
例如在liunx中。
执行sh脚本就可以直接使用 “. +文件名”的方式
set命令作用主要是显示系统中已经存在的shell变量,以及设置shell变量的新变量值。使用set更改shell特性时,符号"+"和"-"的作用分别是打开和关闭指定的模式。set命令不能够定义新的shell变量。如果要定义新的变量,可以使用declare命令以变量名=值的格式进行定义即可。使用:set(选项)(参数)
例如:
declare mylove='Visual C++' #定义新环境变量
再使用set命令将新定义的变量输出为环境变量,输入如下命令: set -a mylove
标示已修改的变量,以供输出至环境变量。
-b:使被中止的后台程序立刻回报执行状态
-C:转向所产生的文件无法覆盖已存在的文件
-d:Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。
-e:若指令传回值不等于0,则立即退出shell。
-f:取消使用通配符。
-h:自动记录函数的所在位置。
-H Shell:可利用"!"加<指令编号>的方式来执行history中记录的指令。
-k:指令所给的参数都会被视为此指令的环境变量。
-l:记录for循环的变量名称。
-m:使用监视模式。
-n:只读取指令,而不实际执行。
-p:启动优先顺序模式。
-P:启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接。
-t:执行完随后的指令,即退出shell。
-u:当执行时使用到未定义过的变量,则显示错误信息。
-v:显示shell所读取的输入值。
-x:执行指令后,会先显示该指令及所下的参数。
清除掉上一次编译留下的中间文件及结果,然后重新编译。
㈢ pwd命令怎么使用
什么是pwd?
‘pwd‘ 代表的是‘Print Working Directory’(打印当前目录)。如它的名字那样,‘pwd’会打印出当前工作目录,或简单的来说就是当前用户所位于的目录。它会打印出以根目录 (/)为起点的完整目录名(绝对目录)。这条命令是一条shell内建命令,并且在大多数shell中都可以使用,如bash、Bourne shell,ksh、zsh等等。
名称: pwd - print name ofcurrent/working directory 输入当前工作路径
pwd命令来查看"当前工作目录"的完整路径。简单得说,每当你在终端进行操作时,你都会有一个当前工作目录。
在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置。
命令格式:pwd [-P|L]
命令功能:查看"当前工作目录"的完整路径
用法举例:
1.查看默认工作目录的完整路径: pwd
2.目录连接链接时,显示出实际路径: pwd -P
[hser0401@dev-l002782 /]$ cd /etc/init.d
[hser0401@dev-l002782 init.d]$ pwd
/etc/init.d
[hser0401@dev-l002782 init.d]$ pwd -P
/etc/rc.d/init.d
pwd: 显示连接路径
pwd -P: 显示实际路径
3./bin/pwd [选项]
选项:
-L 目录连接链接时,输出连接路径
-P 输出物理路径
[hser0401@dev-l002782 init.d]$ /bin/pwd
/etc/rc.d/init.d
[hser0401@dev-l002782 init.d]$ /bin/pwd -P
/etc/rc.d/init.d
[hser0401@dev-l002782 init.d]$ /bin/pwd -L
/etc/init.d
[hser0401@dev-l002782 init.d]$ pwd
/etc/init.d
/bin/pwd和/bin/pwd -P: 显示实际路径
pwd和/bin/pwd -L: 显示连接路径
㈣ 如何运行shell命令
1、shell的内建命令,用户可以直接输入命令名称执行。比如pwd、cd等命令。用户可以通过type命令来判断命令是内建命令还是外部命令。
㈤ shell——内建命令
外部命令有时候也被称为文件系统命令,是存在bash shell之外的程序。它们并不是shell程序的一部分。外部命令通常位于/bin, /usr/bin, /sbin /usr/sbin中,而内建命令都是和shell编译成一体的程序,作为shell工具的组成部分存在。不需要借助外部程序文件来运行。
可以通过type命令查看命令是否是内建命令或者外部命令,如
当外部命令被执行时,会创建一个子进程。这种操作被称为衍生(forking)。外部命令ps很方便显示出它的父进程以及自己所对应的衍生子进程。而内建命令不需要打开程序文件,内建命令的执行速度要更快,效率更高。
注意:有些命令有多种实现。例如echo和pwd既有内建命令也有外部命令。
有两个比较好用的内建命令history 和 alias
shell会自动记录shell运行的历史记录,history命令可以查看,使用 ! 和数字可以调用相应编号的历史命令
alias命令可以给较长的命令取别名,方便使用。