1.1 bash版本
$echo $BASH_VERSION
或
$bash –v
1.2 用内置的set和shopt命令设置bash选项
内置set格式:
set –o option # turn on the option
set +o option # turn off the option
set – [a-z] # abbreviation for an option ; the minus turns it on .
set + [a-z] # abbreviation for an option ; the minus turns it on .
例: $ set –o # 列出所有当前设置的和复位的选项
$ set –o noclobber # 设置noclobber选项,禁止你在重定向时重写文件。没有设置noclobber,>号后面的文件若存在,会被覆盖,不存在则会被创建。
内置shopt(2.x以上版)
Shopt(shell options)内置命令是set命令的一个替代,但它为配置shell增加了更多的选项。
$shopt –p # 打印所有可获得的选项设置
$shopt –s # 显示所有已设置的选项
$shopt –u # 显示所有复位(未设置)的选项
$shopt –s cdspell # 设置cdspell选项
$shopt –u cdspell # 将cdspell选项复位
1.3 提示符
用专用转义序列设置提示符:
反斜杠序列 含义
"u 当前的用户名
"h 主机名
"w 当前的工作目录
"W 当前工作目录的基名
"t 当前时间是HH:MM:SS格式
"d 日期是“星期 月 日”的格式(如Tue May 26)
"s shell的名字
"# 命令编号
"! 命令的历史编号
"$ 如果有效的UID是0,是一个#号,否则是$
"" 反斜杠
"v bash的版本号,如2.03
"V bash的发行号和路径级,如2.03.0
例: $ PS1=”["u@"h "w ]"$”
$ PS1=”"W:"d> ”
或
$PS1=” $(uname -n) > ”
1.4 命令行
处理命令的顺序:
别名—关键词(如if,function,while,until)---函数---内置命令----可执行文件和脚本
内置命令属于shell的一部分(内置在系统中)。如果用一个简单文件名作为命令,shell将首先检查它是否是某条内置命令的名字。如果是内置命令名称,那么shell将其作为调用进程的一部分执行,也就是说shell并不会创建新的进程执行内置命令。shell并不需要在文件结构中搜索内置命令程序,这是因为shell可以立即访问它们。
如果用户输入的简单文件名不是内置命令,shell将使用PATH变量作为指南,搜索目录结构,以查找用户想要的程序。如果shell找到这个程序,那么它将创建一个新的进程以执行这个程序。
内置Type命令判断命令类型;
$ type pwd
pwd is a shell builtin
$ type clear
clear is /usr/bin/clear
$ type if
if is a shell keyword
内置help命令列出所有内置命令或一个特定内置命令的描述;
$ help
$ help help
$ help pwd
改变命令行的处理顺序
bash提供了3个内置命令可忽视命令行处理顺序: command,builtin,enable。
command内置命令将别名和函数从处理顺序中去掉,只处理搜索路径中的内置命令和可执行程序;
builtin 命令只查找内置命令,忽略在路径中找到的函数和可执行程序;
enable可以打开和关闭内置命令,默认时,内置命令是打开的,使用-n开关可以关闭内置命令。不带任何参数,enable命令将列出所有的内置命令。
$ enable –n test # 关闭内置命令test
$ function cd { builtin cd ; echo $PWD; } # 防止引起无穷的递归循环
退出状态:
退出状态为0,表示命令执行成功;非0,表示命令执行失败。
如果shell没有找到命令,返回的状态是127,如果是一个致命的信号引起命令终止,退出状态是128加上引起它死亡的信号的编号。
$ grip ellie /etc/passwd
bash : grip : command not found
$ echo $?
127
$ find / -name core ^C
$ echo $?
130
命令的有条件执行:&&和||
1.5 作业控制
缺省时,已经设置作业控制(一些老版本的UNIX不支持这个特性),如果没有设置,可以用如下命令重置:
set –m # set job control in the .bashrc file
set –o monitor # set job control in the .bashrc file
例:
-bash-3.00$ vi # 按下^Z(control -Z)将vi回话暂停
[1]+ Stopped vi
-bash-3.00$ sleep 25&
[2] 4354 # 标记[2]表示这是第2个在后台运行的作业,它的PID是4354
-bash-3.00$ jobs #列出所有正在运行的作业
[1]+ Stopped vi
[2]- Running sleep 25 &
-bash-3.00$ jobs –l #列出所有正在运行的作业及其作业号,进程号
[1]+ 4353 Stopped (user) vi
[2]- 4354 Running sleep 25 &
-bash-3.00$ jobs %% #显示最近一个放入作业表中的作业
[1]+ Stopped vi
作业控制命令
命令 含义
jobs 列出所有作业
^Z 终止(暂停)作业
bg 启动被终止的后台作业
fg 将后台作业调入前台
stop 暂停一个后台作业
sty tostop 当后台作业向终端发送输出时就暂停它
kill 向指定作业发送kill信号
wait [n] 等待一个指定的作业并返回它的退出状态,这里n是一个PID或作业号
jobs命令的参数 含义
%n 作业号n
%string 以string开头的作业名
%?string 作业名包含string
%% 当前作业
%+ 当前作业
-r 列出所有运行的作业
-s 列出所有暂停的作业