当前位置:文档之家› BASH手册

BASH手册

BASH手册
BASH手册

Bash

出自Linux 人-社区维基

目录

? 1 BASH

? 1.1 NAME

? 1.2 概述(SYNOPSIS)

? 1.3 版权所有(COPYRIGHT)

? 1.4 描述(DESCRIPTION)

? 1.5 选项(OPTIONS)

? 1.6 参数(ARGUMENTS)

? 1.7 启动(INVOCATION)

? 1.8 定义(DEFINITIONS)

? 1.9 保留字(RESERVED WORDS)

? 1.10 shell语法(SHELL GRAMMAR)

? 1.10.1 Simple Commands 简单命令

? 1.10.2 Pipelines 管道

? 1.10.3 Lists 序列

? 1.10.4 Compound Commands 复合命令? 1.11 注释(COMMENTS)

? 1.12 引用(QUOTING)

? 1.13 参数(PARAMETERS)

? 1.13.1 Positional Parameters 位置参数

? 1.13.2 Special Parameters 特殊参数

? 1.13.3 Shell Variables 变量

? 1.13.4 Arrays

? 1.14 扩展(EXPANSION)

? 1.14.1 Brace Expansion

? 1.14.2 Tilde Expansion

? 1.14.3 Parameter Expansion

? 1.14.4 Command Substitution

? 1.14.5 Arithmetic Expansion

? 1.14.6 Process Substitution

? 1.14.7 Word Splitting

? 1.14.8 Pathname Expansion

? 1.14.9 Quote Removal

? 1.15 重定向(REDIRECTION)

? 1.15.1 Redirecting Input

? 1.15.2 Redirecting Output

? 1.15.3 Appending Redirected Output (添加到重定向后的输出尾部)

? 1.15.4 Redirecting Standard Output and Standard Error

? 1.15.5 Here Documents

? 1.15.6 Here Strings

? 1.15.7 Duplicating File Descriptors (复制文件描述符) ? 1.15.8 Moving File Descriptors

? 1.15.9 Opening File Descriptors for Reading and Writing

? 1.16 别名(ALIASES)

? 1.17 函数(FUNCTIONS)

? 1.18 算术求值(ARITHMETIC EVALUATION)

? 1.19 条件表达式(CONDITIONAL EXPRESSIONS)

? 1.20 简单命令扩展(SIMPLE COMMAND EXPANSION)

? 1.21 命令执行(COMMAND EXECUTION)

? 1.22 命令执行环境(COMMAND EXECUTION ENVIRONMENT)

? 1.23 环境(ENVIRONMENT)

? 1.24 退出状态(EXIT STATUS)

? 1.25 信号(SIGNALS)

? 1.26 作业控制(JOB CONTROL)

? 1.27 提示符(PROMPTING)

? 1.28 readline库(READLINE)

? 1.28.1 Readline Notation

? 1.28.2 Readline Initialization 初始化

? 1.28.3 Readline Key Bindings

? 1.28.4 Readline Variables

? 1.28.5 Readline Conditional Constructs

? 1.28.6 Searching

? 1.28.7 Readline Command Names

? 1.28.8 Commands for Moving 移动

? 1.28.9 Commands for Manipulating the History 操纵历史行

? 1.28.10 Commands for Changing Text 改变文本

? 1.28.11 Killing and Yanking 剪切和粘贴

? 1.28.12 Numeric Arguments 数值参数

? 1.28.13 Completing 补全

? 1.28.14 Keyboard Macros 宏

? 1.28.15 Miscellaneous

? 1.28.16 Programmable Completion 可编程补全

? 1.29 历史(HISTORY)

? 1.30 历史扩展(HISTORY EXPANSION)

? 1.30.1 Event Designators

? 1.30.2 Word Designators

? 1.30.3 修饰符 (Modifiers)

? 1.31 shell 内建命令(SHELL BUILTIN COMMANDS)

? 1.32 受限的shell(RESTRICTED SHELL)

? 1.33 参见(SEE ALSO)

? 1.34 文件(FILES)

? 1.35 作者(AUTHORS)

? 1.36 报告BUGS (BUG REPORTS)

? 1.37 BUGS

? 1.38 [中文版维护人]

? 1.39 [中文版最新更新]

? 1.40 《中国linux论坛man手册页翻译计划》:

BASH

Section: User Commands (1)

用户命令 | User_Commands

NAME

bash - GNU Bourne-Again SHell (GNU 命令解释程序 lqBourne二世rq) 概述(SYNOPSIS)

bash [options] [file]

版权所有(COPYRIGHT)

Bash is Copyright (C) 1989-2002 by the Free Software Foundation, Inc. 描述(DESCRIPTION)

Bash是一个与sh兼容的命令解释程序,可以执行从标准输入或者文件中读取的命令。Bash也整合了Korn和C Shell ( ksh和csh ) 中的优秀特性。

Bash的目标是成为遵循 IEEE POSIX Shell and Tools specification (IEEE Working Group 1003.2,可移植操作系统规约: shell 和工具) 的实现。

选项(OPTIONS)

除了在set内建命令的文档中讲述的单字符选项 (option) 之外,bash在启动时还解释下列选项。

-c string

如果有-c选项,那么命令将从string中读取。如果string后面有参数 (argument),它们将用于给位置参数 (positional parameter,以$0起始) 赋值。

-i

如果有-i选项,shell 将交互地执行 ( interactive )。

-l

选项使得bash以类似登录 shell (login shell) 的方式启动 (参见下面的启动(INVOCATION)章节)。

-r

如果有-r选项,shell 成为受限的 ( restricted ) (参见下面的受限的shell(RESTRICTED SHELL)章节)。

-s

如果有-s选项,或者如果选项处理完以后,没有参数剩余,那么命令将从标准输入读取。这个选项允许在启动一个交互 shell 时可以设置位置参数。

-D

向标准输出打印一个以$为前导的,以双引号引用的字符串列表。这是在当前语言环境不是C或POSIX时,脚本中需要翻译的字符串。这个选项隐含了-n选项;不会执行命令。

[-+]O [shopt_option]

shopt_option是一个shopt内建命令可接受的选项 (参见下面的

shell 内建命令(SHELL BUILTIN COMMANDS)章节)。如果有shopt_option,-O 将设置那个选项的取值;+O取消它。如果没有给出shopt_option,

shopt将在标准输出上打印设为允许的选项的名称和值。如果启动选项是+O,输出将以一种可以重用为输入的格式显示。

--

--标志选项的结束,禁止其余的选项处理。任何--之后的参数将作为文件名和参数对待。参数-与此等价。

Bash也解释一些多字节的选项。在命令行中,这些选项必须置于需要被识别的单字符参数之前。

--dump-po-strings

等价于-D,但是输出是 GNU gettext po (可移植对象) 文件格式

--dump-strings

等价于-D

--help

在标准输出显示用法信息并成功退出

--init-file file

--rcfile file

如果 shell 是交互的,执行file中的命令,而不是标准的个人初始化

文件~/.bashrc (参见下面的启动(INVOCATION)章节)

--login

等价于-l

--noediting

如果 shell 是交互的,不使用 GNU readline库来读命令行

--noprofile

不读取系统范围的启动文件/etc/profile或者任何个人初始化文件

~/.bash_profile, ~/.bash_login, 或~/.profile。默认情况下,bash

在作为登录 shell 启动时读取这些文件 (参见下面的启动(INVOCATION)

章节)

--norc

如果 shell 是交互的,不读取/执行个人初始化文件~/.bashrc这个选

项在 shell 以sh命令启动时是默认启用的

--posix

如果默认操作与 POSIX 1003.2 标准不同的话,改变bash的行为来符合标准 (posix mode)

--restricted

shell 成为受限的 (参见下面的受限的shell(RESTRICTED SHELL)章节)

--rpm-requires

产生一个为使脚本运行,需要的文件的列表。这个选项包含了-n选项。

它是为了避免进行编译期错误检测时的限制-- Backticks, [] tests, 还有 evals 不会被解释,一些依赖关系可能丢失

--verbose

等价于-v

--version

在标准输出显示此bash的版本信息并成功退出。

参数(ARGUMENTS)

如果选项处理之后仍有参数剩余,并且没有指定-c或-s选项,第一个参数将假定为一个包含 shell 命令的文件的名字。如果bash是以这种方式启动的,$0将设置为这个文件的名字,位置参数将设置为剩余的其他参数。Bash从这个文件中读取并执行命令,然后退出。Bash的退出状态是脚本中执行的最后一

个命令的退出状态。如果没有执行命令,退出状态是0。尝试的步骤是先试图打开在当前目录中的这个文件,接下来,如果没有找到,shell 将搜索脚本的PATH环境变量中的路径。

启动(INVOCATION)

login shell登录 shell,参数零的第一个字符是-,或者启动时指定了

--login选项的 shell。

interactive交互的 shell,是一个启动时没有指定非选项的参数,并且没有指定-c选项,标准输出和标准输入都连接到了终端 (在isatty(3) 中判定) 的shell,或者启动时指定了-i选项的 shell。如果bash是交互的,PS1环境变量将被设置,并且$-包含i,允许一个 shell 脚本或者一个启动文件来检测这一状态。

下列段落描述了bash如何执行它的启动文件。如果这些启动文件中的任一个存在但是不可读取,bash将报告一个错误。文件名中的波浪号 (~,tilde) 将像EXPANSION章节中Tilde Expansion段描述的那样展开。

当bash是作为交互的登录 shell 启动的,或者是一个非交互的 shell 但是指定了--login选项,它首先读取并执行/etc/profile中的命令,只要那个文件存在。读取那个文件之后,它以如下的顺序查找~/.bash_profile,

~/.bash_login, 和~/.profile, 从存在并且可读的第一个文件中读取并执行

其中的命令。--noprofile选项可以用来在 shell 启动时阻止它这样做。

当一个登录 shell 退出时,bash读取并执行文件~/.bash_logout中的命令,只要它存在。

当一个交互的 shell 但不是登录 shell 启动时,bash从文件~/.bashrc中读取并执行命令,只要它存在。可以用--norc选项来阻止它这样做。--rcfile file选项将强制bash读取并执行文件file中的命令,而不是~/.bashrc中的。

当bash以非交互的方式启动时,例如在运行一个 shell 脚本时,它在环境中查找变量BASH_ENV,如果它存在则将它的值展开,使用展开的值作为一个文件的名称,读取并执行。Bash运作的过程就如同执行了下列命令:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

但是没有使用PATH变量的值来搜索那个文件名。

如果bash以名称sh启动,它试图模仿 (mimic) sh历史版本的启动过程,尽可能地相似,同时也遵循 POSIX 标准。当作为交互式登录 shell 启动时,或者是非交互但使用了--login选项启动的时候,它首先尝试读取并执行文件

/etc/profile和~/.profile, 中的命令. 选项--noprofile用于避免这种行为.当使用命令sh来启动一个交互式的 shell 时, bash查找环境变量ENV,

如果有定义的话就扩展它的值,然后使用扩展后的值作为要读取和执行的文件

的名称.由于使用sh启动的 shell 不会读取和执行任何其他的启动文件,选项--rcfile没有意义.使用名称sh启动的非交互的 shell 不会读取任何其他启动文件.当以sh启动时, bash在读取启动文件之后进入posix模式.

当bash以posix模式启动时,(和使用--posix命令行参数效果相同),它遵

循 POSIX 标准. 这种模式下,交互式 shell 扩展ENV环境变量的值,读取并执

行以扩展后值为文件名的配置文件. 不会读取其他文件.

Bash试着检测它是不是由远程 shell 守护程序,通常为rshd启动的.如果bash发现它是由rshd启动的,它将读取并执行~/.bashrc文件中的命令, 只要这个文件存在并且可读.如果以sh命令启动,它不会这样做. 选项--norc

可以用来阻止这种行为,选项--rcfile用来强制读取另一个文件,但是通常

rshd不会允许它们, 或者用它们来启动 shell.

如果 shell 是以与真实用户(组) id 不同的有效用户(组) id 来启动的, 并且

没有-选项,那么它不会读取启动文件, 也不会从环境中继承 shell 函数. 环境变量中如果出现SHELLOPTS,它将被忽略.有效用户 id 将设置为真实用户 id. 如果启动时给出了-

选项,那么启动时的行为是类似的, 但是不会重置有效用户 id.

定义(DEFINITIONS)

下列定义在文档余下部分中通用.

blank 空白

一个空格或是 tab .

word 词

一个字符序列, shell 将它们视为一个结构单元. 也称为一个token片

段。

name 名称

一个只由字母,数字和下划线构成的词,并且以字符或下划线起始. 也称

为一个word identifier标识符.

metacharacter 元字符

一个字符, 如果不是引用的话, 将成为词的分隔符. 它是如下字符之一:

| & ; ( ) < > space tab

control operator 控制操作符

一个token(标识), 拥有控制功能. 它是如下符号之一:

|| & && ; ;; ( ) |

保留字(RESERVED WORDS)

Reserved words (保留字) 是对 shell 有特殊意义的词. 下列词被识别为保留的, 如果不是引用, 并且不是一个简单命令的起始词 (参见下面的shell语法(SHELL GRAMMAR)), 也不是case 或者for命令的第三个词:

! case do done elif else esac fi for function if in select then until while { } time [[ ]]

shell语法(SHELL GRAMMAR)

Simple Commands 简单命令

simple command(简单命令) 是(可选的)一系列变量赋值, 紧接着是blank(空格) 分隔的词和重定向, 然后以一个control operator结束. 第一个词指明

了要执行的命令, 它被作为第 0 个参数. 其余词被作为这个命令的参数.

simple command简单命令的返回值是它的退出状态, 或是 128+n, 如果命令被signal(信号) n结束的话.

Pipelines 管道

pipeline(管道) 是一个或多个命令的序列,用字符|分隔。管道的格式是这样: [time [-p]] [ ! ] command [ |command2 ... ]

命令command的标准输出通过管道连接到命令command2的标准输入。连接是在命令指定的任何重定向之前进行的(参见下面的REDIRECTION 重定向)。

如果保留字!作为管道前缀,管道的退出状态将是最后一个命令的退出状态的逻辑非值。否则,管道的退出状态就是最后一个命令的。 shell 在返回退出状态值之前,等待管道中的所有命令返回。

如果保留字time作为管道前缀,管道中止后将给出执行管道耗费的用户和系统时间。选项-p将使输出符合 POSIX 指定的格式。环境变量TIMEFORMAT可以

设置为一个格式字符串,指定时间信息应当如何显示;参见下面的Shell Variables 环境变量中TIMEFORMAT的讲述。

管道中的每个命令都作为单独的进程来执行(即,在一个子 shell 中启动)。Lists 序列

list(序列)是一个或多个管道,用操作符;, &, &&, 或||分隔的序列, 并且可以选择用;, &, 或新行符结束.

这些序列操作符中,&&和||优先级相同,其次是;和&,它们的优先级是相同的。

序列中可以有一个或多个新行符来分隔命令,而不是使用分号分隔。

如果一个命令是由控制操作符&结束的, shell 将在后台的子 shell 中执行这个命令。 shell 不会等待命令执行结束,返回状态总是 0。以分号;分隔的命令会被顺序执行;shell 会等待每个命令依次结束。返回状态是最后执行的命令的返回状态。

控制操作符&&和||分别代表 AND 和 OR 序列。一个 AND 序列的形式是command1&&command2

command2只有在command1返回 0 时才被执行。

一个 OR 序列的形式是

command1||command2

command2只有在command1返回非 0 状态时才被执行。AND 和 OR 序列的返回状态是序列中最后执行的命令的返回状态。

Compound Commands 复合命令

compound command(复合命令) 是如下情况之一:

(list)

list序列将在一个子 shell 中执行。变量赋值和影响 shell 环境变量

的内建命令在命令结束后不会再起作用。返回值是序列的返回值。

{ list; }

list序列将在当前 shell 环境中执行。序列必须以一个新行符或分号结束。这种做法也称为group command(命令组)。返回值是序列的返回值。

注意与元字符(和)不同,{和}是reserved words(保留字),必

须出现在能够识别保留字的场合。由于它们不会产生断词(cause a word break),它们和序列之间必须用空格分开。

((expression))

表达式expression将被求值。求值规则在下面的算术求值

(ARITHMETIC EVALUATION)章节中描述。如果表达式的值非零,返回值就是 0;

否则返回值是 1。这种做法和let "expression" 等价。[[expression]]

返回 0 或 1,取决于条件表达式expression求值的情况。表达式是由

下面CONDITIONAL EXPRESSIONS条件表达式章节中描述的原语(primaries) 组

成。[[和]]中的词不会进行词的拆分和路径的扩展处理;而tilde 扩展,参数和变量扩展,算术扩展,命令替换,函数替换和引用的去除则

都将进行。

当使用==和!=操作符时,操作符右边的字符串被认为是一个模式,根据下面Pattern Matching(模式匹配) 章节中的规则进行匹配。如果匹配则返回值是0,否则返回 1。模式的任何部分可以被引用,强制使它作为一个字符串而被匹配。

表达式可以用下列操作符结合起来。根据优先级的降序列出如下:

( expression )

返回表达式expression的值。括号可以用来提升操作符的优先级。

! expression

返回真,如果表达式expression返回假。

expression1&&expression2

返回真,如果表达式expression1和expression2都返回真。

expression1||expression2返回真,如果表达式expression1或者

expression2二者之一返回真。

&&(与) 和||操作符不会对表达式expression2求值,如果expression1可以决定整个条件表达式的返回值的话。

for name [ in word ] ; do list ; done

in之后的一系列词会被扩展,产生一个项目列表。变量name被依次赋

以这个列表中的每个元素,序列list每次都被执行。如果in word被忽略,那么for命令遍历已设置的位置参数(positional parameter,

参见下面的PARAMETERS 参数),为每一个执行一次序列list。返回值是

最后一个命令的返回值。如果in之后的词扩展的结果是空列表,就不会执行任何命令,返回值是 0。

for (( expr1 ; expr2 ; expr3 )) ; do list ; done

首先,算术表达式expr1被根据下面算术求值(ARITHMETIC EVALUATION)中的规则进行求值。然后算术表达式expr2被循环求值,直到它等于 0。每

次expr2结果非零时,序列list都被执行,算术表达式expr3被求

值。如果任何表达式被忽略,将被视为执行结果是 1。返回值是序列list 中被执行的最后一个命令的返回值;或者是 false,如果任何表达式非法

的话。

select name [ in word ] ; do list ; done

in之后的一系列词会被扩展,产生一个项目列表。这个扩展后的词集合

被输出到标准错误上,每个前面加上一个数字。如果in word被忽略,将输出位置参数 (参见下面的PARAMETERS 参数章节)。PS3提示符将被

显示出来,等待从标准输入得到一行输入。如果输入是一个数字且显示

中有对应的词,那么变量name的值将设置为这个词。如果输入一个空行,那么词和提示符将再次显示出来。如果读入了一个 EOF,命令就结束。任

何其他值将设置变量name为空。读入的行保存为变量REPLY. 序列

list在每次选择之后都会执行,直到执行了一个break命令。select

的退出状态是序列list中执行的最后一个命令的退出状态,如果没有执

行命令就是 0。

case word in [ [(] pattern [ |pattern ] ... ) list ;; ] ... esac case命令首先扩展word, 然后依次试着用每个pattern来匹配它,使

用与路径扩展相同的匹配规则(参见下面的Pathname Expansion 路径扩

展章节)。如果找到一个匹配,相应的序列将被执行。找到一个匹配之后,不会再尝试其后的匹配。如果没有模式可以匹配,返回值是 0。否则,

返回序列中最后执行的命令的返回值。

if list; then list; [ elif list; then list; ] ... [ else list; ] fi 序列if list被执行。如果退出状态是 0,then list将被执行。否则,每个elif将被一次执行,如果退出状态是 0,相应的then list将被

执行,命令结束。否则,else list将被执行,如果存在的话。退出状

态是最后执行的命令的退出状态,或者是 0,如果所有条件都不满足。while list; do list; done

until list; do list; done

while命令不断地执行序列do list,直到序列中最后一个命令返回 0。

until命令和while命令等价,除了对条件的测试恰好相反;序列do

list执行直到序列中最后一个命令返回非零状态值。while和until

命令的退出状态是序列do list中最后一个命令的退出状态,或者是

0,如果没有执行任何命令。

[ function ] name () { list; }

这样可以定义一个名为name的函数。函数体body是包含在 { 和 } 之

间的命令序列list。在指定将name作为一个命令运行的场合,这个序

列将被执行。函数的退出状态是函数体最后执行的命令的退出状态(参见

下面的FUNCTIONS 函数章节)。

注释(COMMENTS)

在非交互的 shell 中或者使用内建命令shopt启用了interactive_comments 选项的交互的 shell 中,以#起始的词使得这个词和所有同一行上所有剩余的

字符都被忽略。没有启用interactive_comments选项的交互式 shell 不允许出现注释。这个选项在交互式 shell 中是默认启用的 (参见下面的shell 内建命令(SHELL BUILTIN COMMANDS)章节)。

引用(QUOTING)

引用Quoting用来去掉特定字符或词的特殊意义。引用可以用来禁止对特殊字符的处理,阻止保留字被识别,还用来阻止参数的扩展。

上面在DEFINITIONS 定义中列出的每个元字符metacharacters对于 shell 都有特殊意义。如果要表达它的本义,必须引用它。

在使用命令行历史扩展功能时,history expansion字符,通常是!,必须被引用,才不会进行历史扩展。

有三种引用机制:转义字符(escape character), 单引号和双引号。

一个未被引用的反斜杠 (\) 是转义字符escape character。它保留其后下一个字符的字面意义,除非那是一个新行符。如果\和新行符成对出现,并且反斜杠自身没有被引用,那么\ 被视为续行标志 (意思是,它被从输入流中删除并忽略了)。

将字符放在单引号之中,将保留引用中所有字符的字面意义。单引号不能包含在单引号引用之中,即使前面加上了反斜杠。

将字符放在双引号中,同样保留所有字符的字面意义,例外的情况是$, `, 和\。字符$和`在双引号中仍然具有特殊意义。反斜杠只有后面是下列字符时才有特殊意义:$, `, ", \, 或. 双引号可以包含在双引号引用中,但要在前面加上一个反斜杠。

特殊的参数*和@在双引号中有特殊意义(参见下面的PARAMETERS 参数章节)。

形式为$'string'的词会被特殊处理。它被扩展为string,其中的反斜杠转义字符被替换为 ANSI C 标准中规定的字符。反斜杠转义序列,如果存在的话,将做如下转换:

\a

alert (bell) 响铃

\b

backspace 回退

\e

an escape character 字符 Esc

\f

form feed 进纸

\n

new line 新行符

\r

carriage return 回车

\t

horizontal tab 水平跳格

\v

vertical tab 竖直跳格

\\

backslash 反斜杠

\'

single quote 单引号

\nnn

一个八比特字符,它的值是八进制值nnn (一到三个数字)。

\x HH

一个八比特字符,它的值是十六进制值HH (一到两个十六进制数字)。\c x

一个 ctrl-x字符

扩展结果是单引号引用的,就好像 $ 符号不存在一样。

双引号引用字符串前面加上一个$符号将使得这个字符串被根据当前语言环境(locale) 来翻译。如果当前语言环境是C或者POSIX,这个符号将被忽略。如果这个字符串被翻译并替换了,那么替换结果是双引号引用的。

参数(PARAMETERS)

一个参数parameter是一个储存值的实体。它可以是一个名称name , 一个数字或者是下面Special Parameters 特殊参数章节中列出的特殊字符之一。从shell 的角度来看,一个变量variable是一个由名称name代表的参数。一个变量有一个值value以及零个或多个属性attibutes。属性可以使用内建命令declare来设置(参见下面shell内建命令(SHELL BUILTIN COMMANDS) 章节中对declare的描述)。

如果给一个参数赋值,那么它就被定义了。空字符串是有效的值。一旦一个变量被定义了,它只能用内建命令unset来取消(参见下面shell 内建命令(SHELL BUILTIN COMMANDS)章节).

一个变量variable可以用这样的语句形式来赋值:

name=[value]

如果没有给出值value,变量就被赋为空字符串。所有值values都经过了波浪线扩展,参数和变量扩展,命令替换,算术扩展和引用的删除(参见下面的EXPANSION 扩展章节)。如果变量设置了integer 整数属性,那么值value将进行算术扩展,即使没有应用 $((...)) 扩展 (参见下面的Arithmetic Expansion

算术扩展章节)。不会进行词的拆分,除非是下面Special Parameters 特殊参数中提到的"$@"。不会进行路径的扩展。赋值语句也出现在下列内建命令中,作为它们的参数:declare, typeset, export, readonly, 和local。Positional Parameters 位置参数

位置参数positional parameter是以一或多个数字代表的参数,除了 0。位置参数是在 shell 启动时,根据它的参数来赋值的,也可以用内建命令set来重新赋值。位置参数不能用赋值语句来赋值。在一个 shell 函数被执行的时候,位置参数会被暂时地替换掉 (参见下面的FUNCTIONS 函数章节)。

当位置参数由两个以上的数字构成时,它必须放在括号内 (参见下面的EXPANSION 扩展章节)。

Special Parameters 特殊参数

shell 对一些参数做特殊处理。这些参数只能被引用而不能被赋值。

*

扩展为位置参数,从 1 开始。如果扩展发生在双引号中,它扩展为一个

词,值是各个参数,以特殊变量IFS的第一个字符分隔。也就是说,"$*"

等价于 "$1c$2c...",这里c是变量IFS的第一个字符。如果没有设置IFS,那么参数将用空格分隔。IFS

@

扩展为位置参数,从 1 开始。如果扩展发生在双引号中,每个参数都将

扩展为一个词。也就是说, "$@" 等价于 "$1" "$2" ... 如果位置参数

不存在,"$@" 和$@扩展为空 (即,它们被删除了)。

#

扩展为位置参数的个数,以十进制表示。

?

扩展为最近执行的前台管道的状态。

-

扩展为当前选项标志。标志是在启动时或以内建命令set指定的,或者

是 shell 自身设置的 (例如选项-i )。

$

扩展为 shell 的进程 ID。在一个 () 子 shell 中,它扩展为当前 shell 的进程 ID 而不是子 shell 的。

!

扩展为最近一次执行的后台 (异步) 命令的进程号。

扩展为 shell 或者 shell 脚本的名称。这个变量是在 shell 初始化时

设置的。如果bash是执行脚本文件时启动的,$0将设置为那个文件的名称。如果bash启动时的参数包含-c,那么$0被设置为启动命令行

被执行后的第一个参数,如果有的话。否则,它被设置为用来启动bash的文件名,就是参数 0。

_

shell 启动时,设置为 shell 或参数中被执行的 shell 脚本的绝对路径名。然后,在扩展时扩展为上一个命令的最后一个参数。它也被设置为被执行的每个命令的文件全名并且被设置到这个命令执行的环境当中。

当检查邮件时,这个参数保存着正在检查的邮件文件的名称。

Shell Variables 变量

shell 定义了下列变量:

BASH

扩展为用来启动当前bash实例的文件全名。

BASH_VERSINFO

一个只读数组变量,成员保存着当前bash实例的版本信息。赋予数组元素的值是如下这些:

BASH_VERSINFO[0]

主版本号 (release).

BASH_VERSINFO[1]

次版本号 (version).

BASH_VERSINFO[2]

补丁版本

BASH_VERSINFO[3]

编译信息

BASH_VERSINFO[4]

发布时的状态 (例如, beta1).

BASH_VERSINFO[5]

MACHTYPE平台类型

BASH_VERSION

扩展为一个字符串,描述了这个bash. 实例的版本。

COMP_CWORD

${COMP_WORDS}的索引,指向当前光标位置所在的词。这个变量只有在被可编程补全功能 (参见下面的Programmable Completion章节) 调用的 shell 函数中才可用。

COMP_LINE

当前命令行。这个变量只有在被命令补全功能调用的 shell 函数和外部命令中才可用。

COMP_POINT

相对于当前命令起始处的当前光标位置。如果当前光标位置是当前命令的末端,它的值就和${#COMP_LINE}相等。这个变量只有在被命令补全功能调用的 shell 函数和外部命令中才可用。

COMP_WORDS

一个数组变量 (参见下面的Arrays(数组)一节),由当前命令行的各个单词构成。这个变量只有在被命令补全功能调用的 shell 函数中才可用。DIRSTACK

一个数组变量,包含当前目录栈的内容。栈中的目录排列的顺序就是用内建命令dirs显示时的顺序。对这个数组变量的成员赋值可以用来修改栈中已有的目录,但是要添加和删除目录就必须使用内建命令pushd和

popd。对它赋值不会改变当前目录。如果取消了DIRSTACK的定义,它就失去了它的特殊意义,即使后来重新定义它。

EUID

扩展为当前用户的有效用户 ID。它在 shell 启动时设置。它是只读的。FUNCNAME

当前执行的 shell 函数名。这个变量只有在执行一个 shell 函数时存

在。向FUNCNAME赋值没有效果并且返回一个错误。如果取消了FUNCNAME的定义,它就失去了特殊的意义,即使后来重新定义它。

GROUPS

一个数组变量,包含当前用户所属的组的列表。向GROUPS赋值没有效果

并且返回一个错误。如果取消了GROUPS的定义,它就失去了特殊的意义,即使后来重新定义它。

HISTCMD

当前命令的历史编号,或者历史列表中的索引。如果取消了HISTCMD的定义,它就失去了特殊的意义,即使后来重新定义它。

HOSTNAME

自动设置为当前的主机名。

HOSTTYPE

自动设置为一个字符串,唯一地标识着正在运行bash的机器类型。默认值是系统相关的。

LINENO

每次引用这个参数时,shell 将它替换为一个指示在脚本或函数中当前行号的十进制数字(从 1 开始)。如果不是在脚本或函数中,替换得到的值不一定有意义。如果取消了LINENO的定义,它就失去了特殊的意义,即

使后来重新定义它。

MACHTYPE

自动设置为一个字符串,完整的描述了正在运行bash的系统类型,格式是标准的 GNU cpu-company-system格式。默认值是系统相关的。OLDPWD

上一次命令cd设置的工作目录。

OPTARG

内建命令getopts处理的最后一个选项参数值 (参见下面的shell 内建

命令(SHELL BUILTIN COMMANDS)章节)。

OPTIND

内建命令getopts将处理的下一个参数的索引 (参见下面的shell 内建命令(SHELL BUILTIN COMMANDS)章节)。

OSTYPE

自动设置的一个字符串,描述了正在运行bash的操作系统。默认值是系统相关的。

PIPESTATUS

一个数组变量 (参见下面的Arrays 数组章节),包含最近执行的前台管道中的进程(可能只包含一个命令)的退出状态。

PPID

shell 的父进程的进程号。这个变量是只读的。

PWD

由cd命令设置的当前工作目录。

RANDOM

每次引用这个参数时,都会产生一个 0 到 32767 之间的随机整数。可以通过向RANDOM赋值来初始化随机数序列。如果取消了RANDOM的定义,它就失去了特殊的意义,即使后来重新定义它。

REPLY

变量的值将作为内建命令read的输入,如果命令没有参数的话。SECONDS

每次引用这个参数时,返回 shell 自运行以来的秒数。如果向SECONDS赋值,此后对它的引用将返回自赋值时起的秒数加上所赋予的值。如果取消SECONDS的定义,它就失去了特殊的意义,即使后来重新定义它。SHELLOPTS

一个冒号分隔的被允许的 shell 选项列表。列表中每个词都是内置命令set的-o选项的有效参数。SHELLOPTS中出现的选项也是set -o显示为on的选项。如果bash启动时从环境中找到这个变量,那么在读取任何配置文件之前,列表中的每个选项都将被设置。这个变量是只读的。SHLVL

每次启动一个bash的实例时都会增加。

UID

扩展为当前用户的 ID,在启动时初始化。这个变量是只读的。

下列变量被 shell 使用。有时bash会为变量赋默认值;这些情况在下面会标出。

BASH_ENV

如果bash在执行一个 shell 脚本时设定了这个变量,它的值将被解释为一个文件名,包含着初始化 shell 用到的命令,就像~/.bashrc中一样。BASH_ENV的值在被解释为一个文件名之前要经过参数扩展,命令替换和算术扩展。不会使用PATH来查找结果文件名。

CDPATH

命令cd的搜索路径。这是一个冒号分隔的目录列表,shell 从中查找cd

命令的目标目录。可以是这样: ".:~:/usr".

COLUMNS

用在内建命令select当中,用来判断输出选择列表时的终端宽度。自

动根据 SIGWINCH 信号来设置。

COMPREPLY

一个数组变量,bash从中读取可能的命令补全。它是由命令补全功能调用的 shell 函数产生的。

FCEDIT

内建命令fc默认的编辑器。

FIGNORE

一个冒号分隔的后缀名列表,在进行文件名补全时被忽略 (参见下面的

READLINE章节)。一个后缀满足其中之一的文件名被排除在匹配的文件名

之外。可以是这样: ".o:~".

GLOBIGNORE

一个冒号分隔的模式列表,定义了路径名扩展时要忽略的文件名集合。如

果一个文件名与路径扩展模式匹配,同时匹配GLOBIGNORE中的一个模式

时,它被从匹配列表中删除。

HISTCONTROL

如果设置为ignorespace, 以space开头的行将不会插入到历史列表

中。如果设置为ignoredups, 匹配上一次历史记录的行将不会插入。设

置为ignoreboth会结合这两种选项。如果没有定义,或者设置为其他值,所有解释器读取的行都将存入历史列表,但还要经过HISTIGNORE处理。

这个变量的作用可以被HISTIGNORE替代。多行的组合命令的第二和其余行都不会被检测,不管HISTCONTROL是什么,都会加入到历史中。HISTFILE

保存命令历史的文件名 (参见下面的HISTORY 历史章节)。默认值是

~/.bash_history。如果取消定义,在交互式 shell 退出时命令历史将

不会保存。

HISTFILESIZE

历史文件中包含的最大行数。当为这个变量赋值时,如果需要的话,历史

文件将被截断来容纳不超过这个值的行。默认值是 500。历史文件在交

互式 shell 退出时也会被截断到这个值。

HISTIGNORE

一个冒号分隔的模式列表,用来判断那个命令行应当保存在历史列表中。

每个模式都定位于行首,必须匹配整行 (没有假定添加 `*')。在

HISTCONTROL指定的测试结束后,这里的每个模式都要被测试。除了平常的 shell 模式匹配字符, `&'匹配上一个历史行。`&'可以使用反斜杠来转义;反斜杠在尝试匹配之前将被删除。多行的组合命令的第二行以

及后续行都不会被测试,不管HISTIGNORE是什么,都将加入到历史中。HISTSIZE

命令历史中保存的历史数量 (参见下面的HISTORY 历史章节)。默认值是

500。

HOME

当前用户的个人目录;内建命令cd的默认参数。在执行波浪线扩展时也用到这个变量。

HOSTFILE

包含一个格式和/etc/hosts相同的文件名,当 shell 需要补全主机名

时要读取它。shell 运行过程中可以改变可能的主机名补全列表;改变

之后下一次需要主机名补全时bash会将新文件的内容添加到旧列表中。

如果定义了HOSTFILE但是没有赋值,bash将尝试读取/etc/hosts文件来获得可能的主机名补全列表。当取消HOSTFILE的定义时,主机名列表

将清空。

IFS

内部字段分隔符Internal Field Separator用来在扩展之后进行分词,使用内部命令read将行划分成词。默认值是

``

IGNOREEOF

控制交互式 shell 接受到唯一一个EOF字符时的行为。如果有定义,值

是需要在一行的开始连续输入EOF字符,直到可以使bash退出的字符

个数。如果这个变量存在,但是值不是一个数字或者没有赋值,默认值是

10。如果变量没有定义,EOF标志着输入的结束。

INPUTRC

readline的启动配置文件,而不是默认的~/.inputrc (参见下面的

READLINE章节)。

LANG

用来决定没有特地用LC_变量指定的语言环境项。

LC_ALL

这个变量超越了LANG和所有其他指定语言环境项的LC_变量。

LC_COLLATE

这个变量决定了为路径扩展的结果排序时的字母顺序,决定了范围表达式

的行为,等价类,和路径扩展中的归并顺序以及模式匹配。

LC_CTYPE

这个变量决定了字符的解释和路径扩展以及模式匹配中字符类的行为。LC_MESSAGES

这个变量决定了翻译以$前导的双引号字符串时的语言环境。

LC_NUMERIC

这个变量决定了格式化数字时的语言环境分类。

LINES

内建命令select用它来判断输出选择列表时的列宽度。在收到

SIGWINCH 信号时自动设置。

MAIL

如果这个参数设置为一个文件名,并且没有设置环境变量MAILPATH的话,bash将在这个文件中通知用户有邮件到达。

MAILCHECK

指定bash检查邮件的频率是多少,以秒为单位。默认值是 60 秒。需要检查邮件的时候,shell 在显示提示符之前将进行检查。如果取消它的

定义,或者设置为并非大于等于零的数值,shell 将禁止邮件检查。

MAILPATH

一个冒号分隔的文件名列表,从中检查邮件。当邮件到达某个特殊文件中

时,输出的特定消息可以通过将文件名与消息以 `?' 分隔来指定。在

消息的文本中,$_扩展为当前邮件文件的文件名。例如:

MAILPATH='/var/mail/bfox?"You have mail":~/shell-mail?"$_ has mail!"'

Bash为这个变量提供默认值,但是它使用的用户邮件文件的位置是系统相关的(例如,/var/mail/$USER)。

OPTERR

如果设置为 1,bash显示内建命令getopts产生的错误消息 (参见下

面的shell 内建命令(SHELL BUILTIN COMMANDS)章节)。每次 shell 启动时或

者一个 shell 脚本被执行时OPTERR被初始化为 1。

PATH

搜索命令的路径。它是一个冒号分割的目录列表,shell 从中搜索命令

(参见下面的命令执行(COMMAND EXECUTION)段落)。默认的路径是系统相关

的,是由安装bash的系统管理员设置的。通常它的值是

``/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin:.。POSIXLY_CORRECT

如果bash启动环境中有这个变量,它将在读取启动配置文件之前进入

posix mode,就好像提供了--posix启动参数一样。如果 shell 运行过

程中设置了它,bash就启用posix mode,就好像执行了set -o posix命

令一样。

PROMPT_COMMAND

如果有定义,它的值将作为一个命令,每次显示主提示符之前都会执行。PS1

这个参数的值被扩展 (参见下面的PROMPTING 提示符段落),用作主提示

符字符串。默认值是 ``\s-\v\$ 。

PS2

这个参数的值同PS1一起被扩展,用作次提示符字符串。默认值是 ``> 。PS3

这个参数的值被用作内建命令select的提示符 (参见上面的SHELL

GRAMMAR 语法章节)。

PS4

这个参数的值同PS1一起被扩展,在执行跟踪中在bash显示每个命令

之前显示。需要的话,PS4的第一个字符会被复制多次,来指示

indirection 的层数。默认值是 ``+ 。

TIMEFORMAT

在前缀 time 保留字的管道中,这个参数的值用作格式字符串,指定计

时信息如何显示。字符%引入的转义序列,被扩展为时间值或其他信息。

转义序列和它们的含义如下所示;括号中是可选的成分。

Linux Bash Shell快速入门 在线教程

BASH 的基本语法 最简单的例子——Hello World! 关于输入、输出和错误输出 BASH 中对变量的规定(与C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1 最简单的例子——Hello World! 几乎所有的讲解编程的书给读者的第一个例子都是Hello World 程序,那么我们今天也就从这个例子出发,来逐步了解BASH。 用vi 编辑器编辑一个hello 文件如下: #!/bin/bash # This is a very simple example echo Hello World 这样最简单的一个BASH 程序就编写完了。这里有几个问题需要说明一下: 一,第一行的#! 是什么意思 二,第一行的/bin/bash 又是什么意思 三,第二行是注释吗 四,echo 语句 五,如何执行该程序 #! 是说明hello 这个文件的类型的,有点类似于Windows 系统下用不同文件后缀来表示不同文件类型的意思(但不相同)。Linux 系统根据"#!" 及该字串后面的信息确定该文件的类型,关于这一问题同学们回去以后可以通过"man magic"命令及/usr/share/magic 文件来了解这方面的更多内容。在BASH 中第一行的"#!" 及后面的"/bin/bash" 就表明该文件是一个BASH 程序,需要由/bin 目录下的bash 程序来解释执行。BASH 这个程序一般是存放在/bin 目录下,如果你的Linux 系统比较特别,bash 也有可能被存放在/sbin 、/usr/local/bin 、/usr/bin 、/usr/sbin 或/usr/local/sbin 这样的目录下;如果还找不到,你可以用"locate bash" "find / -name bash 2> /dev/null" 或"whereis bash" 这三个命令找出bash 所在的位置;如果仍然找不到,那你可能需要自己动手安装一个BASH 软件包了。 第二行的"# This is a ..." 就是BASH 程序的注释,在BASH 程序中从“#”号(注意:后面紧接着是“!”号的除外)开始到行尾的多有部分均被看作是程序的注释。的三行的echo 语句的功能是把echo 后面的字符串输出到标准输出中去。由于echo 后跟的是"Hello World" 这个字符串,因此"Hello World"这个字串就被显示在控制台终端的屏幕上了。需要注意的是BASH 中的绝大多数语句结尾处都没有分号。 如何执行该程序呢?有两种方法:一种是显式制定BASH 去执行:

Shell命令

Shell Shell 就是用户与操作系统内核之间的接口,起着协调用户与系统的一致性和在用户与系统之间进行交互的作用。 4.1.1 Shell 的基本概念 1. 什么是S hell Shell 就是用户与操作系统内核之间的接口,起着协调用户与系统的一致性和在用户与系统之间进行交互的作用。Shell 在L inux 系统中具有极其重要的地位,如图4-1 所示

第 4 章 Shell 与 V i 编辑器 - 71 - diff grep vi multitasking sh gcc device hardware interface kernn e l TCP/IP stack bash utilii t es 图 4-1 Linux 系统结构组成 2. Shell 的功能 Shell 最重要的功能是命令解释,从这种意义上来说,Shell 是一个命令解释器。Linux 系统中的所有可执行文件都可以作为 Shell 命令来执行。将可执行文件作一个分类,如表 4-1 所示。 表 4-1 可执行文件的分类 部的解释器将其解释为系统功能调用并转交给内核执行;若是外部命令或实用程序就试图 在硬盘中查找该命令并将其调入内存,再将其解释为系统功能调用并转交给内核执行。在 查找该命令时分为两种情况: 用户给出了命令路径,Shell 就沿着用户给出的路径查找,若找到则调入内存,若没有 则输出提示信息; 用户没有给出命令的路径,Shell 就在环境变量 PATH 所制定的路径中依次进行查找, 若找到则调入内存,若没找到则输出提示信息。 图 4-2 描述了 S hell 是如何完成命令解释的。

BASH脚本编程

一个最简单的脚本 这篇指南将通过一些例子来帮助大家学习功能强大的shell脚本编程. 在这一节中我将学习一些简单的脚本,它将有利于你深入学习一些知识。 一个最经典的HelloWorld程序 #!/bin/bash echoHelloWorld 这个脚本只有二行,它的第一行这个脚本程序由那个程序来解释.第二行只有一个简单的动作,它的功能是在终端上打印出一行”HelloWorld”。如果你测试着执行这个命令时(./hello.sh),你将会得到一个commandnotfound的信息,这种情况大部分可能是你的第一行#!/bin/bash 这个程序有问题,你一定要确保bash可以找到并且可用。(一般情况下你还要对这个脚本附一个可执行权限) #chmodu xhello.sh 一个非常简单的备份脚本 #!/bin/bash tar-cZf/var/my-backup.tgz/home/me/ 在这个脚本中,它替换了上一个例子的将一行信息打印在终端上的功能,取尔代之的是一个备份/home目录的tar备份命令。 关于重定向的一些信息 最基本的理论基础 这里有对于三个文件的重定向定义:stdin(标准输入),stdout(标准输出)andstderr(标准错误输出)(std=standard). 基本上你可以 1.重定向stdout到一个文件 2.重定向stderr到一个文件 3.重定向stdout到stderr 4.重定向stderr到stdout 5.重定向stderr到stdout中并且成为一个文件 6.重定向stderrandstdouttostdout 7.重定向stderrandstdouttostderr 在Linux中1代表'标准输出',2代表’标准错误’ 标准输出 这个例子将会使ls的显示结果重定向到一个文件中. ls-l>ls-l.txt

linux常用命令之bash入门指南

1 什么是Bash 什么是Shell Bash 是GNU Bourne-Again SHell,是目前大多数Linux发行版采用的Shell。 Shell 是*nix提供给用户使用的界面。 一个操作系统的底层是独立运行的,用户界面和底层分开,可以最大限度的保证系统稳定。Shell就是一个特殊的程序,负责接受用户的命令,并把系统的响应返回给用户。 Bash Shell一般不需要自己安装,在安装发行版的同时都会安装好。 Shell的存在是和登陆相关的,从用户名密码验证通过以后,Shell就启动了,知道你退出,Shell就结束了运行。 除了Bash Shell之外,还有很多其他的Shell。 2 Linux的文件、目录、程序 Linux的文件、目录、程序是使用bash操作的主要对象。有必要事先了解一下文件、目录和程序的概念 文件 Linux中一切都是文件、普通的文件、设备文件、管道也是文件的形式。一切操作都是文件为基础的。DOS操作系统早期也是模拟这种方式,不过有很多漏洞(比如C:concon会蓝屏) 文件是有属性的,有一个属性表示这个文件是不是目录,有3个属性表示这个文件的访问权限,还有一些表示从这个文件派生出的文件属性。 目录 目录是管理文件的手段,不同的文件要分门别类才容易找到。严格的说,目录也是一种文件,是具有目录属性的文件。

文件和目录都有所有者和所有组。叫UID和GID,对应的,有3个属性表示相应的权限。后面写到ls和chmod有详细地说明。 程序 程序是可以执行的代码,有些是直接交给内核或者CPU执行的,有些是通过其他程序执行的(解释脚本),可以运行的程序都有一个可执行的属性。 3 简单的命令ls cp mv mkdir rm chown chmod 前面说了一些枯燥的概念,现在趁着看官还没有烦躁,开始实际操作的例子。 QUOTE: Last login: Mon Aug 14 21:52:47 2006 from 61.149.202.143 [root@CERNET ~]# 这就是bash登陆后的样子。#井号是root特权用户的提示符号,一般用户提示符是$符号。 现在输入ls,列出当前目录的内容 QUOTE: [root@CERNET ~]# ls anaconda-ks.cfg install.log.syslog log4cplus-1.0.2 MceMonitor-install-files.tgz.md5s um vmstat_monitor Ice-3.0.1 jwsmtp-1.32.11 log4cplus-1.0.2.tar.gz memcached-1.1.12 wuhan.sh Ice-3.0.1.tar.gz jwsmtp-1.32.11.tar.gz login_keepalived memcached-1.1.12.tar.gz ids.sh libevent-0.8 MceMonitor sar.log install.log libevent-0.8.tar.gz MceMonitor-install-files.tgz tmp

Linux Shell(bash) 重定向技巧

Linux Shell(bash) 重定向技巧 linux 环境中支持输入输出重定向,用符号<和>来表示。 0、1和2分别表示标准输入、标准输出和标准错误信息输出, 可以用来指定需要重定向的标准输入或输出,比如2>a.txt 表示将错误信息输出到文件a.txt中。 同时,还可以在这三个标准输入输出之间实现重定向,比如将错误信息重定向到标准输出,可以用2>&1来实现。 Linux下还有一个特殊的文件/dev/null,它就像一个无底洞,所有重定向到它的信息都会消失得无影无踪。这一点非常有用,当我们不需要回显程序的所有信息时,就可以将输出重定向到/dev/null。 如果想要正常输出和错误信息都不显示,则要把标准输出和标准错误都重定向到/dev/null,例如: # ls 1>/dev/null 2>/dev/null 还有一种做法是将错误重定向到标准输出,然后再重定向到/dev/null,例如: # ls >/dev/null 2>&1 注意:此处的顺序不能更改,否则达不到想要的效果,此时先将标准输出重定向到/dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null. 1. 标准输入的控制 语法:命令< 文件将文件做为命令的输入。 例如: mail -s “mail test” wesongzhou@https://www.doczj.com/doc/7c3456628.html, < file1 将文件file1 当做信件的内容,主 题名称为mail test,送给收信人。 2. 标准输出的控制 语法:命令> 文件将命令的执行结果送至指定的文件中。 例如: ls -l > list 将执行“ls -l” 命令的结果写入文件list 中。

Linux之bash介绍

Linux之bash介绍 shell是一个程序,可以称之为壳程序,用于用户与操作系统进行交互。用来区别与核,相当于是一个命令解析器,Shell有很多中,这里列出其中几种 - Bourne SHell(sh) - Bourne Again SHell(bash) - C SHell(csh) - KornSHell(ksh) - zsh 各个shell的功能都差不太多,在某些语法的下达下面有些区别,Linux预设就是bash。这里主要介绍bash。 bash bash命令是sh命令的超集。大多数sh脚本都可以在bash下运行,bash主要有如下这些功能: bash功能 记录历史命令:bash可以记录曾经的命令,保持在~/.bash_history文件中,只保存上次注销登录之后的命令 tab键自动补全:使用tab见可以自动不全命令或者目录i alias命令别名:可以使用alias ll='ls -al'来设置命令的别名 工作控制:可以将某些任务放在后台去运行,这里不多种介绍 程序脚本:可以执行shell脚本文件 通配符:在查找相关文件或者执行相关命令时,可以使用通配符* 内建命令type:可以使用type 命令来查看某个命令是否为内建在bash当中的命令「 bash变量 bash中变量有两种,分别是环境变量和自定义变量,可以理解为全局变量和局部变量,在理解他们的区别前,需要知道副程序和子程序,举个例子,当前的bash我们称之为父程序,而在这个bash下执行的任何程序,都称之为子程序。那全局变量和局部变量的区别就是,全局变量在子程序中仍然有效,局部变量只在当前程序中生效。(注意,一旦退出父程序这个bash的话,无论是全局变量还是局部变量都失效了,再次打开bash时,该变量是不存在的) 变量范围 变量的设定 变量的设定有几个规则,这里列举如下: - 设定变量通过=来链接,例如name=sujinzhou,两边不能有空格,如果有空格的话,需要用引号 - 变量名只能是英文名和数字,只能是英文开头 - 如果变量内容被引号扩起来的话,双引号和单引号是有区别的 - 双引号里面的特殊字符,会保持原有的特性。 - 单引号里面的特殊字符,只会是字符 - 使用\将特殊字符转换为一般字符

linux系统中的常见基本命令大全

linux系统中的常见基本命令大全 系统信息 arch显示机器的处理器架构(1) uname-m显示机器的处理器架构(2) uname-r显示正在使用的内核版本 dmidecode-q显示硬件系统部件-(SMBIOS/DMI) hdparm-i/dev/hda罗列一个磁盘的架构特性 hdparm-tT/dev/sda在磁盘上执行测试性读取操作 cat/proc/cpuinfo显示CPUinfo的信息 cat/proc/interrupts显示中断 cat/proc/meminfo校验内存使用 cat/proc/swaps显示哪些swap被使用 cat/proc/version显示内核的版本 cat/proc/net/dev显示网络适配器及统计 cat/proc/mounts显示已加载的文件系统 lspci-tv罗列PCI设备 lsusb-tv显示USB设备 date显示系统日期 cal2007显示2007年的日历表 date0412********.00设置日期和时间-月日时分年.秒 clock-w将时间修改保存到BIOS 关机(系统的关机、重启以及登出) shutdown-hnow关闭系统(1) init0关闭系统(2) telinit0关闭系统(3) shutdown-hhours:minutes&按预定时间关闭系统 shutdown-c取消按预定时间关闭系统 shutdown-rnow重启(1) reboot重启(2)

logout注销 文件和目录 cd/home进入'/home'目录' cd..返回上一级目录 cd../..返回上两级目录 cd进入个人的主目录 cd~user1进入个人的主目录 cd-返回上次所在的目录 pwd显示工作路径 ls查看目录中的文件 ls-F查看目录中的文件 ls-l显示文件和目录的详细资料 ls-a显示隐藏文件 ls*[0-9]*显示包含数字的文件名和目录名 tree显示文件和目录由根目录开始的树形结构(1) lstree显示文件和目录由根目录开始的树形结构(2) mkdirdir1创建一个叫做'dir1'的目录' mkdirdir1dir2同时创建两个目录 mkdir-p/tmp/dir1/dir2创建一个目录树 rm-ffile1删除一个叫做'file1'的文件' rmdirdir1删除一个叫做'dir1'的目录' rm-rfdir1删除一个叫做'dir1'的目录并同时删除其内容 rm-rfdir1dir2同时删除两个目录及它们的内容 mvdir1new_dir重命名/移动一个目录 cpfile1file2复制一个文件 cpdir/*.复制一个目录下的所有文件到当前工作目录 cp-a/tmp/dir1.复制一个目录到当前工作目录 cp-adir1dir2复制一个目录 ln-sfile1lnk1创建一个指向文件或目录的软链接 lnfile1lnk1创建一个指向文件或目录的物理链接

xshell-linux命令(1)

suse linux 常用命令 (1)命令ls——列出文件 ls -la 给出当前目录下所有文件的一个长列表,包括以句点开头的“隐藏”文件 ls a* 列出当前目录下以字母a开头的所有文件 ls -l *.doc 给出当前目录下以.doc结尾的所有文件 (2)命令cp——复制文件 cp afile afile.bak 把文件复制为新文件afile.bak cp afile /home/bible/ 把文件afile从当前目录复制到/home/bible/目录下 cp * /tmp 把当前目录下的所有未隐藏文件复制到/tmp/目录下 cp -a docs docs.bak 递归性地把当前目录下的docs目录复制为新目录docs.bak,保持文件属性,并复制所有的文件,包括以句点开头的隐藏文件。为了方便起见,-a选项包含-R 选项 cp -i 在覆盖前询问用户 cp -v 告诉用户正在做什么 (3)命令mv——移动和重命名文件 mv aflie bfile 将afile重命名为bfile mv afile /tmp 把当前目录下的afile移动到/tmp/目录下 (4)命令rm——删除文件和目录 rm afile 删除文件afile rm * 删除当前目录下的所有文件(未隐藏文件)。rm命令不删除目录,除非也指定了-r(递归)参数。 rm -rf domed 删除domed目录以及它所包含的所有内容 rm -i a* 删除当前目录下所有以字母a开头的文件,并且在每次删除时,提示用户进行确认 (5)命令cd——更改目录 cd ~ 切换到主目录 cd /tmp 切换到目录/tmp cd dir切换到当前目录下的dir目录 cd /切换到根目录 cd ..切换到到上一级目录 cd ../..切换到上二级目录 cd ~切换到用户目录,比如是root用户,则切换到/root下 (6)命令mkdir——建立目录 mkdir phots 在当前目录中建立名为photos的目录 mkdir -p this/that/theother 在当前目录下建立指定的嵌套子目录 (7)命令mkdir——删除目录 mkdir 将删除空目录 (8)命令more、less——查看文件内容 more /etc/passwd 查看/etc/passwd的内容 功能:分页显示命令

BASH手册

Bash 出自Linux 人-社区维基 目录 ? 1 BASH ? 1.1 NAME ? 1.2 概述(SYNOPSIS) ? 1.3 版权所有(COPYRIGHT) ? 1.4 描述(DESCRIPTION) ? 1.5 选项(OPTIONS) ? 1.6 参数(ARGUMENTS) ? 1.7 启动(INVOCATION) ? 1.8 定义(DEFINITIONS) ? 1.9 保留字(RESERVED WORDS) ? 1.10 shell语法(SHELL GRAMMAR) ? 1.10.1 Simple Commands 简单命令 ? 1.10.2 Pipelines 管道 ? 1.10.3 Lists 序列 ? 1.10.4 Compound Commands 复合命令? 1.11 注释(COMMENTS) ? 1.12 引用(QUOTING) ? 1.13 参数(PARAMETERS) ? 1.13.1 Positional Parameters 位置参数 ? 1.13.2 Special Parameters 特殊参数 ? 1.13.3 Shell Variables 变量 ? 1.13.4 Arrays ? 1.14 扩展(EXPANSION) ? 1.14.1 Brace Expansion ? 1.14.2 Tilde Expansion ? 1.14.3 Parameter Expansion ? 1.14.4 Command Substitution ? 1.14.5 Arithmetic Expansion ? 1.14.6 Process Substitution ? 1.14.7 Word Splitting ? 1.14.8 Pathname Expansion ? 1.14.9 Quote Removal

Linux基本操作与bash编程

1.实验一Linux基本操作 1.1 实验目的 (1)复习Linux基本命令; (2)掌握常用Linux命令。 1.2 实验设备 一台pc机、RedHat Linux 7.2以上版本、虚拟机软件Virtualbox。 1.3 实验原理 (1)练习命令行模式下的常用命令: man:命令帮助 ALT-Fx:虚终端切换 常用命令:cat、ls、ps、chmod、kill、ln、cp、mv、rm、cd、pwd、mkdir、chown、who、w、wc、whoami、date、uname等 (2)编辑器vi的使用:使用vi建立并修改两个文本文件, account.txt, password.txt 1.4 实验步骤 (1)常用命令 1. 使用man man命令查询man命令的Manual: NAME章节指示了该命令的名字和简介; SYNOPSIS章节列出了该命令可用的使用方式及其符号; DESCRIPTION章节详细描述各使用方式及符号的作用; 2. df 命令 3. ls列目录 4. ps列进程,指出每一列是什么内容 5. vi编辑器,使用vi 编辑器创建一个一文件 account.txt (在Documents目录下)

apple:x:1001:1000:yourname_and_phonenumber:/home/apple:bin/bash banana:x:1002:1000:yourname_and_phonenumber:/home/banana:bin/bash 再创建一个password.txt 文件 apple:applepass banana:bananapass (3)其他命令,介绍每个命令使用后显示的内容 2.实验二Linux Shell程序设计 2.1 实验目的 (1)掌握Linux shell程序运行方法; (2)掌握Linux Shell程序基本语法; (3)了解Linux环境变量; (4)编写简单Linux shell程序。 2.2 实验设备 一台pc机、RedHat Linux 7.2以上版本、虚拟机virutalbox。 2.3 实验原理 (1)查看/etc/.profile文件, 查看$Home/.bashrc 文件 (2)通配符“*”、“?”、“[]”的使用 $ls [a-c]* 和$ls [a,m,t]*命令 (3)重定向和管道的使用 ls | more cat > test.txt (4)变量 $lookup=/usr/mydir $echo $lookup $export lookup:让进程使用

bash,if语句的参数

bash shell if 命令参数说明 摘要本章我们会讨论在Bash脚本中使用条件,包含以下几个话题: if 语句使用命令的退出状态比较和测试输入和文件 if/then/else 结构 if/then/elif/else 结构使用和测试位置参数嵌套 if 语句布尔表达式使用case 语句 7.1. 介绍if 7.1.1. 概要有时候你需要指定shell脚本中的依靠命令的成功与否来实施不 同过程的行为。if 结构允许你来指定这样的条件。最精简的 if 命令的语法是: if TEST-COMMANDS; then CONSEQUENT-COMMANDS; fi TEST-COMMAND 执行后且它的返回状态是0,那么 CONSEQUENT-COMMANDS 就执行。返回状态是最后一个命令的退出状态,或者当没有条件是真的话为0。 TEST-COMMAND 经常包括数字和字符串的比较测试,但是也可以是任何在成功时返回状态0或者失败时返回一些其他状态的一些命令。一元表达式经常用于检查文件的状态。如果对某个要素primaries, FILE 参数是 /dev/fd/N 这样的形式,那么就检查文件描述符“N”。stdin, stdout 和 stderr 和他们各自的文件描述符也可以用于测试。 7.1.1.1. 和if使用的表达式下表包含了一个组成 TEST-COMMAND 命令或者命 令列表,称作“要素primaries” 的概览。这些primaries放置在方括号中来表示一个条件表达式的测试。表 7.1. 主表达式Primary 意义 [ -a FILE ] 如果 FILE 存在则为真。 [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。 [ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真。 [ -d FILE ] 如果 FILE 存在且是一个目录则为真。 [ -e FILE ] 如果 FILE 存在则为真。 [ -f FILE ] 如果 FILE 存在且是一个普通文件则为真。 [ -g FILE ] 如果 FILE 存在且已经设置了SGID则为真。 [ -h FILE ] 如果 FILE 存在且是一个符号连接则为真。 [ -k FILE ] 如果 FILE 存在且已经设置了粘制位则为真。 [ -p FILE ] 如果 FILE 存在且是一个名字管道(F如果O)则为真。

BASH基本语法

BASH 的基本语法 ?最简单的例子—— Hello World! ?关于输入、输出和错误输出 ?BASH 中对变量的规定(与 C 语言的异同) ?BASH 中的基本流程控制语法 ?函数的使用 2.1 最简单的例子—— Hello World! 几乎所有的讲解编程的书给读者的第一个例子都是 Hello World 程序,那么我们今天也就从这个例子出发,来逐步了解 BASH。 用 vi 编辑器编辑一个hello 文件如下: #!/bin/bash # This is a very simple example echo Hello World 这样最简单的一个 BASH 程序就编写完了。这里有几个问题需要说明一下: 一,第一行的 #! 是什么意思 二,第一行的 /bin/bash 又是什么意思 三,第二行是注释吗 四,echo 语句 五,如何执行该程序 #! 是说明 hello 这个文件的类型的,有点类似于 Windows 系统下用不同文件后缀来表示不同文件类型的意思(但不相同)。Linux 系统根据 "#!" 及该字串后面的信息确定该文件的类型,关于这一问题同学们回去以后可以通过 "man magic"命令及 /usr/share/magic 文件来了解这方面的更多内容。在 BASH 中第一行的 "#!" 及后面的 "/bin/bash" 就表明该文件是一个 BASH 程序,需要由 /bin 目录下的 bash 程序来解释执行。BASH 这个程序一般是存放在 /bin 目录下,如果你的 Linux 系统比较特别,bash 也有可能被存放在 /sbin 、/usr/local/bin 、/usr/bin 、/usr/sbin 或 /usr/local/sbin 这样的目录下;如果还找不到,你可以用 "locate bash" "find / -name bash 2> /dev/null" 或 "whereis bash" 这三个命令找出 bash 所在的位置;如果仍然找不到,那你可能需要自己动手安装一个 BASH 软件包了。 第二行的 "# This is a ..." 就是 BASH 程序的注释,在 BASH 程序中从“#”号(注意:后面紧接着是“!”号的除外)开始到行尾的部分均被看作是程序的注释。的三行的echo 语句的功能是把 echo后面的字符串输出到标准输出中去。由于 echo 后跟的是 "Hello World" 这个字符串,因此 "Hello World"这个字串就被显示在控制台终端的屏幕上了。需要注意的是 BASH 中的绝大多数语句结尾处都没有分号。 如何执行该程序呢?有两种方法:一种是显式制定 BASH 去执行:

相关主题
文本预览
相关文档 最新文档