linux shell command

来源:互联网 发布:住宅设计优化 编辑:程序博客网 时间:2024/06/04 20:13

1、ps:查看进程

 

2、kill:结束进程

 

3、sleep:使正在执行的进程在规定时间内进入休眠状态

 

4、man:获取命令的帮助信息
man command


5、pwd:查找自己所在的位置

 

6、find:在子目录中搜索匹配的文件
语法:
[root @test /root ]# find [路径] [参数]
参数说明:
1. 时间:
-atime n :将n*24小时内被存取过的文件列出来
-ctime n :将n*24小时内被改变、新增的文件或目录列出来
-mtime n :将n*24小时内被修改过的文件列出来
-newer file :把比file还要新的文件列出来
2. 使用名称:
-gid n :寻找群组ID为n的文件
-group name :寻找群组名称为name的文件
-uid n :寻找拥有者ID为n的文件
-user name :寻找用户名称为name的文件
-name file :寻找文件名为file的文件名称(可以使用通配符)
-type type :寻找文件属性为type的文件,type包含了b, c, d, p, l, s,
这些与前一章的属性相同。例如l为Link而d为目录
范例:
[root @test /root]# find / -name testing <==寻找文件名为testing
[root @test /root]# find / -name 'test*' <==寻找文件名包含test的
[root @test /root]# find . -ctime 1
寻找当前目录下一天内新增的目录或文件
[root @test /root]# find /home/test –newer .bashrc
寻找/home/test目录下比.bashrc还要新的文件


7、whereis:查找文件
[root @test /root ]# whereis [-bmsu] [目录名称]
参数说明:
-b :只找二进制文件
-m :只找在说明文件manual路径下的文件
-s :只找source源文件
-u :没有说明文档的文件!
范例:
[root @test /root]# whereis passwd


8、locate:定位文件
[root @test /root ]# locate [目录名称]


9、whatis:获取命令简介

 

10、ls:显示当前目录下的内容
使用ls命令列出/root目录下的隐藏文件与相关的属性参数。
[root @test /root ]# ls [-ailS]
[root@test /root]# ls -al /root

参数说明:
-a :列出所有文件(连同隐藏文档)
-i :打印inode的值
-l :详细列出,连同文件大小、属性数据等
-S :以文件大小排序

11、dir:把文件按列对齐输出

 

12、vdir:缺省地列出文件的全部信息

 

13、cat:把一个或多个文件内容显示到标准输出
[root @test /root ]# cat [-n]
参数说明:
-n: 显示时,连行号一起输出到屏幕上


14、more:使你在浏览文件时可以一次阅读一屏或者一行
[root @test /root ]# more [文件名]


15、less:与more类似但功能更强
[root @test /root ]# less [文件名]


16、head:显示文件头部
[root @test /root ]# head [-n number] [文件名]
[root @test /root]# head ~/.bashrc <==默认情况下,显示前10行
[root @test /root]# head -n 20 ~/.bashrc <==显示前20行

17、tail:显示文件尾部
[root @test /root ]# tail [-n number] [文件名]
[root @test /root]# tail ~/.bashrc
[root @test /root]# tail -n 5 ~/.bashrc <==只显示最后5行

18、rm:删除一个或多个文件
[root @test /root ]# rm [-fir] [文件名]
参数说明:
-i :提供用户确认(这是默认值)。
-r :循环删除,直到没有东西为止。
-f :force,就是强制删除。


19、touch:创建一个或多个文件

 

20、mkdir:创建一个或多个目录
[root @test /root ]# mkdir [目录名称]


21、rmdir:删除一个或多个目录
[root @test /root ]# rmdir [目录名称]


22、mv:移动或者更改文件
[root @test /root ]# mv [-u] [源文件] [目标文件]
参数说明:
-u :同样,为update的简写,当源文件比目标文件还新时才会动作!


23、cp:拷贝文件或目录
[root @test /root ]# cp [-drsu] [源文件] [目标文件]
cp 来源文件 目的文件
cp .bashrc .bashrc_test

-d :进行复制时,如果是复制到链接文件,若不加任何参数,则默认情况下会将链接到的源文件
复制到目的地,若加-d,则链接文件可原封不动地将链接这个快捷方式复制到目的地。
-r :可以进行目录的复制。
-s :做成链接文件,与ln指令功能相同。
-u, --update:如果源文件较新,或者没有目标文件,才会进行复制动作。可用于备份操作。


24、ln:为文件建立链接
[root @test /root ]# ln [-s] [源文件] [目标文件]
-s :提供符号链接
:如果直接使用ln而不加任何参数,就属于硬链接

[root @test test]# ln passwd passwd-hard
[root @test test]# ln -s passwd passwd-soft

25、grep:在文件内进行搜索

 

26、tar:压缩与解压缩

 

27、gzip:压缩与解压缩

 

28、compress:压缩

 

29、uncompress:解压缩

 

30、vi:进入vim编辑器

 

32、ifconfig:网卡配置

 

33、ifup:启动网卡

 

34、ifdown:禁用网卡

 

35、hostname:显示或设置系统的超级用户

 

36、useradd:增加用户

 

37、userdel:删除用户

 

38、usermod:修改用户

 

39、groupadd:增加组

 

40、groupdel:删除组

 

41、groupmod:修改组

 

42、passwd:设置密码

 

43、chpasswd:用文件配置设置密码

 

44、chown:改变文件所有权
改变拥有者chown
chown [ -R ] 账号名称[:群组名称]文件或目录
chown test tmp
chown –R root:root tmp
参数说明:
-R :循环地将该目录下的所有文件都改成 user 与 group 的名称

45、chgrp:改变用户分组
chgrp 群组名称 文件或目录
chgrp users tmp

46、chmod:改变文件属性
改变权限chmod
chmod [-R] xyz 文件或目录
其中,xyz为同三组rwx属性数值的相加
chmod 777 .bashrc
增加.bashrc这个文件的每个人均可写入的权 chmod a+w .bashrc

要取消所有人的x属性
chmod a-x .bashrc

参数说明:
-R :循环地将该目录的文件都改变

47、fdisk:对磁盘做分区
[root @test /root ]# fdisk [-l] [设备名称]


48、mke2fs:建立ext2/3文件系统
[root @test /root ]# mke2fs [-b block-size] [-i inode-size]
参数说明:
-b :设定每个数据块占用的大小,目前支持的大小有
1024, 2048和4096 三种
-i :设定 inode 值
-c :检查磁盘错误,会比较慢
-L :设定这个扇区的label(表头名称)
-j :建立ext3这个具有日志管理功能的文件格式

49、mkswap:建立swap文件系统

 

50、mount:挂载文件系统
语法:
[root @test /root ]# mount [-ahlV]
[root @test /root ]# mount -t type /dev/hdxx /mountpoint
[root @test /root ]# mount -o [options]
[root @test /root ]# umount /mountpoint
参数说明:
-a :依照/etc/fstab的内容装载所有相关的硬盘
-h :只列出mount相关的参数,并不装载任何设备
-l :列出当前已经装载的设备、文件系统名称与装载点
-V :列出mount的版本信息
type :将后面/dev/hdxx设备以type的文件格式装载到
/mountpoint这个点。常见的type有下面几个:
vfat, msdos :是支持Windows系统的文件格式,其中vfat较常用
ext, ext2 :是Linux的主要文件格式
iso9660 :光驱的文件格式
nfs, ntfs, ufs :Windows 2000使用的NTFS格式
-o :这个参数后面接的项很多,如下:
rw :让装载的硬盘为可擦写
suid :允许该硬盘配置文件为SUID状态
exec :允许该硬盘执行二进制文件
auto :允许该硬盘使用mount -a参数设定
nouser :禁止他人(非root用户)使用装载功能,这是默认值。
async :允许硬盘进行异步记录(内存与硬盘不同步,最常用)
defaults:同时具有rw, suid, dev, exec, auto, nouser, async这些功能
nosuid :不许该硬盘具有SUID文件属性
ro :设定为只读属性
remount :让系统已经装载的硬盘重新被装载
[root @test /root]# mount -a
[root @test /root]# mount -t iso9660 /dev/cdrom /mnt/cdrom
装载光驱
[root @test /root]# mount -t vfat /dev/fd0 /mnt/floppy
装载Windows文件系统的软驱
[root @test /root]# mount -t ext2 /dev/fd0 /mnt/floppy
装载Linux文件系统的软驱
[root @test /root]# mount -t ext2 /dev/hdc6 /home
装载Linux文件格式的硬盘
[root @test /root]# mount -o remount,rw /

51、umount:卸载文件系统
语法:
[root @test root]# umount [-f] [device|mount_point]
参数说明:
-f :强制将该文件系统退出,最常使用在无法退出的NTFS文件系统中
范例:
[root @test root]# umount /home


52、su:改变用户身份以成为超级用户

 

53、sudo:临时以管理员身份运行命令

 

54、rpm:软件包管理

 

55、uname:查看Linux内核版本

 

56、insmod:安装核心模块

 

57、modprobe:从Linux内核中添加或删除模块

 

58、lsmod:列出系统所安装的模块

 

59、rmmod:卸载模块

 

60、cmp:比较两个文件,给出第一个差别字符的位置和行号

 

61、diff:比较两个文件,按序显示差别行

 

62、diff3:比较两个文件

 

63、sdiff:使用交互方式来合并文件,并以逐字格式显示文件。

 

64、apt-get:软件包管理,自动解决依赖关系

 

65、shutdown:在规定时间内关机

 

66、aptitude:软件包管理,很强大

 

67、date:显示当前时间
显示日期的指令:date
[root@test root]# date +%Y/%m/%d
2002/10/16
[root@test root]# date +%H:%M
15:32
+%Y%m%d是date的一些参数功能。

68、who:所有当前正在使用Linux系统的人或者用户的列表。

 

69、clear:清屏

 

70、分号:命令分割符

 

71、cd:切换当前目录
. 代表当前层目录
.. 代表上层目录
~ 代表自己的根目录
~user 代表到user这个人的根目录
[root @test /root ]# cd [相对路径或绝对路径]

72、info:获取命令的帮助信息

显示日历的指令:cal
也就是说,cal的语法为:
[root@test root]# cal [month] [year]

Ctrl + c:在Linux下,如果输入了错误的指令或参数,有时候系统会一直运行而不停止,
这个时候怎么办?别担心,如果您想让当前程序终止,可以键入Ctrl + c,这就是中断当前
程序的按键。
q:有很多程序在运行的时候(例如man指令或more指令),如果想跳出来,按下q即
可!这个按键也是很多指令常定义的退出键。

[root @test /root ]# nl [文件名] 即查看文件的同时可以显示行号

od [文件名] od指令用于读取非ASCII数据文件,例如二进制文件


[root @test /root ]# which [文件名称]

 

vi

h 或向左方向键 光标向左移动一个字符
j 或 向下方向键 光标向下移动一个字符
k 或向上方向键 光标向上移动一个字符
l 或向右方向键 光标向右移动一个字符
Ctrl + f 屏幕向前翻动一页(常用)
Ctrl + b 屏幕向后翻动一页(常用)
Ctrl + d 屏幕向前翻动半页
Ctrl + u 屏幕向后翻动半页
+ 光标移动到非空格符的下一列
- 光标移动到非空格符的上一列
n<space> 按下数字后再按空格键,光标会向右移动这一行的n个字符。例如
20<space>,则光标会向右移动20个字符
0 (这是数字0)移动到这一行的第一个字符处(常用)
$ 移动到这一行的最后一个字符处(常用)
H 光标移动到这个屏幕最上方的那一行
M 光标移动到这个屏幕中央的那一行
L 光标移动到这个屏幕最下方的那一行
G 移动到这个文件的最后一行(常用)
nG 移动到这个文件的第n行。例如20G,则会移动到这个文件的第20
行(可配合:set nu)
n<Enter> 光标向下移动n行(常用)
一般模式 查找与替换
/word 在光标之后查找一个名为word的字符串(常用)
?word 在光标之前查找一个名为word的字符串
第9章 vi文本处理器
151
(续表)
一般模式 查找与替换
:n1,n2s/word1/word2/g 在第n1与n2行之间查找word1这个字符串,并将该字符串替换为
word2(常用)
:1,$s/word1/word2/g 从第一行到最后一行查找word1字符串,并将该字符串替换为word2
(常用)
:1,$s/word1/word2/gc 从第一行到最后一行查找word1字符串,并将该字符串替换为
word2,且在替换前显示提示符让用户确认(conform)(常用)
一般模式删除、复制与粘贴
x, X x为向后删除一个字符,X为向前删除一个字符(常用)
nx 向后删除n个字符
dd 删除光标所在的那一整列(常用)
ndd 删除光标所在列的向下n列,例如,20dd则是删除20列(常用)
d1G 删除光标所在行到第一行的所有数据
dG 删除光标所在行到最后一行的所有数据
yy 复制光标所在行(常用)
nyy 复制光标所在列的向下n列,例如,20yy则是复制20列(常用)
y1G 复制光标所在列到第一列的所有数据
yG 复制光标所在列到最后一列的所有数据
p, P p为复制的数据粘贴在光标下一行,P则为粘贴在光标上一行(常用)
J 将光标所在列与下一列的数据结合成一列
u 恢复前一个动作(常用)
编辑模式
i, I 插入:在当前光标所在处插入输入的文字,已存在的字符会向后退
(常用)
a, A 添加:由当前光标所在处的下一个字符开始输入,已存在的字符会
向后退(常用)
o, O 插入新的一行:从光标所在处的下一行行首开始输入字符(常用)
r, R 替换:r会替换光标所指的那一个字符;R会一直替换光标所指的文
字,直到按下Esc为止(常用)
Esc 退出编辑模式,回到一般模式(常用)
命令行模式
:w 将编辑的数据写入硬盘文件中(常用)
:w! 若文件属性为只读,强制写入该文件
:q 退出vi(常用)
:q! 若曾修改过文件,又不想保存,使用!为强制退出不保存文件
:wq 保存后退出,若为:wq!,则为强制保存后退出(常用)
:w [filename] 将编辑数据保存为另一个文件(类似另存新文档)
第3篇学习Shell
152
(续表)
命令行模式
:r [filename] 在编辑的数据中,读入另一个文件的数据。亦即将 filename这个文
件内容加到光标所在行的后面
:set nu 显示行号,设定之后,会在每一行的前面显示该行的行号
:set nonu 与set nu相反,为取消行号
n1,n2 w [filename] 将n1到n2的内容保存为filename这个文件。


bash
设定变量的规则如下:
1. 变量与变量内容以等号“=”连结;
2. 等号两边不能直接接空格符;
3. 变量名称只能是英文字母与数字,其中数字不能是开头字符;
4. 若有空格符,可以使用双引号或单引号将变量内容结合起来,但要特别留意,双引
号内的特殊字符可以保留变量特性,单引号内的特殊字符则仅为一般字符;
5. 必要时以跳转字符“\”将特殊符号(如Enter,$,\,空格符,'等)变成一般符号;
6. 在一串指令中,还需要借助其他指令提供的信息,这时可以使用quote“` command`”;
7. 若该变量为扩增变量内容时,则需以双引号及$变量名称(如"$PATH":/home)继续
累加内容;
8. 若该变量需要在其他子程序执行,则以export使变量可以动作,如export PATH;
9. 通常大写字符为系统预设变量,自定义变量可以使用小写字符,方便判断(纯粹依
照用户兴趣与嗜好);
10. 取消变量的方法为:unset 变量名称。

[test @tset test]# alias lm='ls -al | more'
[test @test test]# history


RegExp
符号 内容
* 通配符,代表任意字符(0到多个)
? 通配符,代表一个字符
# 注释,这个最常用在脚本中,视为说明
\ 跳转符号,将特殊字符或通配符还原成一般字符
| 分隔两个管线命令的界定
; 连续性命令的界定(注意,与管线命令不同)
~ 用户的根目录
$ 即变量前需要加的变量值
& 将指令变成在背景下工作
! 逻辑运算中的“非”(not)
第3篇学习Shell
170
(续表)
符号 内容
/ 路径分隔符号
>, >> 输出导向,分别为“取代”与“累加”
' 单引号,不具有变量置换功能
" 具有变量置换功能
` ` 两个“`”中间为可以先执行的指令
( ) 中间为子shell的起始与结束
[ ] 中间为字符组合
{ } 中间为命令区块组合
组合键 执行结果
Ctrl + C 终止当前命令
Ctrl + D 输入结束(EOF),例如邮件结束的时候
Ctrl + M 就是Enter
Ctrl + S 暂停屏幕的输出
Ctrl + Q 恢复屏幕的输出
Ctrl + U 在提示符下,将整行命令删除
Ctrl + Z 暂停当前命令

命令重定向
标准输入:代码为0,或称为stdin,使用方式为<


· 标准输出:代码为1,或称为stdout,使用方式为1>
· 错误输出:代码为2,或称为stderr,使用方式为2>
基本的指令书写方式为:
指令 >
2>
>>
<
设备或文件
左边一定是指令,右边则可能是设备或文件。
注意,1>与2>之间没有空格符。相关使用说明举例如下:
[test @test test]# ls -al > list.txt
将显示结果输出到 list.txt 文件中,若该文件已存在则予以取代
[test @test test]# ls -al >> list.txt
将显示结果累加到list.txt 文件中,该文件为累加的,旧数据保留!
[test @test test]# ls -al 1> list.txt 2> list.err
将显示数据正确输出到 list.txt,错误的数据输出到list.err
[test @test test]# ls -al 1> list.txt 2>&1
将显示数据不论正确或错误均输出到list.txt中。注意,错误与正确信息输出到同一个文件中,则
必须以上面的方法来写,不能写成其他格式
[test @test test]# ls -al 1> list.txt 2> /dev/null
将显示的数据,正确的输出到list.txt,错误的数据予以丢弃!

shell脚本编写技巧

1.test测试命令
test命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试,
其测试符和相应的功能分别如下:
(1)数值测试:
-eq:等于则为真
-ne:不等于则为真
-gt:大于则为真
-ge:大于等于则为真
-lt:小于则为真
-le:小于等于则为真
(2)字符串测试:
=:等于则为真
!=:不相等则为真
-z 字符串:字符串长度伪则为真
-n 字符串:字符串长度不伪则为真
(3)文件测试:
-e 文件名:如果文件存在则为真
-r 文件名:如果文件存在且可读则为真
-w 文件名:如果文件存在且可写则为真
-x 文件名:如果文件存在且可执行则为真
-s 文件名:如果文件存在且至少有一个字符则为真
-d 文件名:如果文件存在且为目录则为真
-f 文件名:如果文件存在且为普通文件则为真
-c 文件名:如果文件存在且为字符型特殊文件则为真
-b 文件名:如果文件存在且为块特殊文件则为真
另外,Linux还提供了与(“!”)、或(“-o)、非(“-a”)三个逻辑操作符用于将测试条件连接起来,
其优先级为:“!”最高,“-a”次之,“-o”最低。
同时,bash也能完成简单的算术运算,格式如下:
$[expression]
例如:var1=2
var2=$[var1*10+1]
则:var2的值为21。

2.if条件语句
if [ -x /sbin/quotaon ]; then
echo "Turning on Quota for root filesystem"
/sbin/quotaon /
elif [ -x /sbin/quotaon ]; then
/usr/bin/bash
else
echo "ok"
fi

3.for 循环
#!/bin/sh
WORD="a b c d e f g h i j l m n o p q r s t u v w x y z"
for i in $WORD ; do
echo $i
done

#!/bin/sh
FILES=`ls /txt/*.txt`
for txt in $FILES ; do
doc=`echo $txt | sed "s/.txt/.doc/"`
mv $txt $doc
done

4.while和until 循环
#!/bin/sh
while [ -f /var/run/ppp0.pid ] ; do
killall pppd
done

#!/bin/sh
until [ -f /var/run/ppp0.pid ] ; do
sleep 1
done

Shell还提供了true和false两条命令用于建立无限循环结构的需要,
它们的返回状态分别是总为0或总为非0

5.case 条件选择
#!/bin/sh
case $1 in
start | begin)
echo "start something"
;;
stop | end)
echo "stop something"
;;
*)
echo "Ignorant"
;;
esac
case表达式中也可以使用shell的通配符(“*”、“?”、“[ ]”)。

6.无条件控制语句break和continue
break 用于立即终止当前循环的执行,而contiune用于不执行循环中后面的语句
而立即开始下一个循环的执行。这两个语句只有放在do和done之间才有效。

7.函数定义
在shell中还可以定义函数。函数实际上也是由若干条shell命令组成的,
因此它与shell程序形式上是相似的,不同的是它不是一个单独的进程,
而是shell程序的一部分。函数定义的基本格式为:
functionname
{
若干命令行
}
调用函数的格式为:
functionname param1 param2 ……
shell函数可以完成某些例行的工作,而且还可以有自己的退出状态,
因此函数也可以作为if、while等控制结构的条件。
在函数定义时不用带参数说明,但在调用函数时可以带有参数,此时
shell将把这些参数分别赋予相应的位置参数$1、$2、...及$*。

8.命令分组
在shell中有两种命令分组的方法:“()”和“{}”,前者当shell执行()
中的命令时将再创建一个新的子进程,然后这个子进程去执行圆括弧中的命令。
当用户在执行某个命令时不想让命令运行时对状态集合(如位置参数、环境变量、
当前工作目录等)的改变影响到下面语句的执行时,就应该把这些命令放在圆括
弧中,这样就能保证所有的改变只对子进程产生影响,而父进程不受任何干扰;
{}用于将顺序执行的命令的输出结果用于另一个命令的输入(管道方式)。当我们
要真正使用圆括弧和花括弧时(如计算表达式的优先级),则需要在其前面加上转
义符()以便让shell知道它们不是用于命令执行的控制所用。

9.信号
trap命令用于在shell程序中捕捉到信号,之后可以有三种反应方式:
(1)执行一段程序来处理这一信号
(2)接受信号的默认操作
(3)忽视这一信号
trap对上面三种方式提供了三种基本形式:
第一种形式的trap命令在shell接收到signal list清单中数值相同的信号时,
将执行双引号中的命令串。
trap 'commands' signal-list
trap "commands" signal-list
为了恢复信号的默认操作,使用第二种形式的trap命令:
trap signal-list
第三种形式的trap命令允许忽视信号:
trap " " signal-list
注意:
(1)对信号11(段违例)不能捕捉,因为shell本身需要捕捉该信号去进行内存的转储。
(2)在trap中可以定义对信号0的处理(实际上没有这个信号),shell程序在其终止
(如执行exit语句)时发出该信号。
(3)在捕捉到signal-list中指定的信号并执行完相应的命令之后,如果这些命令没有将
shell程序终止的话,shell程序将继续执行收到信号时所执行的命令后面的命令,这样
将很容易导致shell程序无法终止。
另外,在trap语句中,单引号和双引号是不同的,当shell程序第一次碰到trap语句时,
将把commands中的命令扫描一遍。此时若commands是用单引号括起来的话,那么shell
不会对commands中的变量和命令进行替换,否则commands中的变量和命令将用当时具体
的值来替换。

10. 运行shell程序的方法
执行shell程序的方法有三种:
(1)sh shell程序文件名
格式为:
bash shell 程序文件名
这实际上是调用一个新的bash命令解释程序,而把shell程序文件名作为参数传递给它。
新启动的shell将去读指定的文件,执行文件中列出的命令,当所有的命令都执行完结束。
该方法的优点是可以利用shell调试功能。
(2)sh

11. bash程序的调试
bash -选择项 shell程序文件名
几个常用的选择项是:
-e:如果一个命令失败就立即退出
-n:读入命令但是不执行它们
-u:置换时把未设置的变量看作出错
-v:当读入shell输入行时把它们显示出来
-x:执行命令时把命令和它们的参数显示出来
上面的所有选项也可以在shell程序内部用“set -选择项”的形式引用,而“set +选择项”则
将禁止该选择项起作用。如果只想对程序的某一部分使用某些选择项时,则可以将该部分用
上面两个语句包围起来。
1.未置变量退出和立即退出
未置变量退出特性允许用户对所有变量进行检查,如果引用了一个未赋值的变量就终止shell
程序的执行。shell通常允许未置变量的使用,在这种情况下,变量的值为空。如果设置了未
置变量退出选择项,则一旦使用了未置变量就显示错误信息,并终止程序的运行。未置变量退
出选择项为“-u”。
当shell运行时,若遇到不存在或不可执行的命令、重定向失败或命令非正常结束等情况时,如
果未经重新定向,该出错信息会打印在终端屏幕上,而shell程序仍将继续执行。要想在错误发
生时迫使shell程序立即结束,可以使用“-e”选项将shell程序的执行立即终止。
2.shell程序的跟踪
调试shell程序的主要方法是利用shell命令解释程序的“-v”或“-x”选项来跟踪程序的执行。“-v”
选择项使shell在执行程序的过程中,把它读入的每一个命令行都显示出来,而“-x”选择项使shell
在执行程序的过程中把它执行的每一个命令在行首用一个“+”加上命令名显示出来。并把每一个变量
和该变量所取的值也显示出来,因此,它们的主要区别在于:在执行命令行之前无“-v”则打印出命
令行的原始内容,而有“-v”则打印出经过替换后的命令行的内容。
除了使用shell的“-v”和“-x”选择项以外,还可以在shell程序内部采取一些辅助调试的措施。
例如,可以在shell程序的一些关键地方使用echo命令把必要的信息显示出来,它的作用相当于C语
言中的printf语句,这样就可以知道程序运行到什么地方及程序目前的状态。

12. bash的内部命令
bash命令解释程序包含了一些内部命令。内部命令在目录列表时是看不见的,它们由shell本身提供。
常用的内部命令有:echo、eval、exec、export、readonly、read、shift、wait和点(.)。
下面简单介绍其命令格式和功能。
1.echo
命令格式:echo arg
功能:在屏幕上打印出由arg指定的字符串。
2.eval
命令格式:eval args
功能:当shell程序执行到eval语句时,shell读入参数args,并将它们组合成一个新的命令,然后
执行。
3.exec
命令格式:exec 命令 命令参数
功能:当shell执行到exec语句时,不会去创建新的子进程,而是转去执行指定的命令,
当指定的命令执行完时,该进程,也就是最初的shell就终止了,所以shell程序中exec
后面的语句将不再被执行。
4.export
命令格式:export 变量名 或:export 变量名=变量值
功能:shell可以用export把它的变量向下带入子shell从而让子进程继承父进程中的环境变量。
但子shell不能用export把它的变量向上带入父shell。
注意:不带任何变量名的export语句将显示出当前所有的export变量。
5.readonly
命令格式:readonly 变量名
功能:将一个用户定义的shell变量标识为不可变的。不带任何参数的readonly命令将显示出
所有只读的shell变量。
6.read
命令格式:
read变量名表
功能:从标准输入设备读入一行,分解成若干字,赋值给shell程序内部定义的变量。
7.shift语句
功能:shift语句按如下方式重新命名所有的位置参数变量:$2成为$1,$3成为$2……在程序中
每使用一次shift语句,都使所有的位置参数依次向左移动一个位置,并使位置参数“$#”减一,
直到减到0。
8.wait
功能:是shell等待在后台启动的所有子进程结束。Wait的返回值总是真。
9.exit
功能:退出shell程序。在exit之后可有选择地指定一个数字作为返回状态。
10.“.”(点)
命令格式:. Shell程序文件名
功能:使shell读入指定的shell程序文件并依次执行文件中的所有语句。

13. 特殊参数:
1. $*: 代表所有参数,其间隔为IFS内定参数的第一个字元
2. $@: 与*星号类同。不同之处在於不参照IFS
3. $#: 代表参数数量
4. $?: 执行上一个指令的返回值
5. $-: 最近执行的foreground pipeline的选项参数
6. $$: 本身的Process ID
7. $!: 执行上一个背景指令的PID
8. $_: 显示出最後一个执行的命令
9. &&: 只有前一条命令执行成功才会执行后一条命令