1) type
查看指令是外部指令还是内建在bash中的指令
type [-tpa] 指令
-t :当加入 -t 参数时,type 会将 name 以底下这些字眼显示出他的意义: file :表示为外部指令;alias :表示该指令为命令别名所设定的名称;builtin :表示该指令为 bash 内建的指令功能;
-p :如果后面接的 name 为外部指令时,才会显示完整文件名;
-a :会由 PATH 变量定义的路径中,将所有含 name 的指令都列出来,包含 alias
2)查看环境变量
env
3)查看所有变量(环境变量和自定义变量)
set
环境变量(可以)和自定义变量(不能)区别,是否能被子程序引用;
export
子程序仅会继承父程序的环境变量, 子程序不会继 承父程序的自定义变量,export将自定义变量转化为环境变量,供子程序使用
shell编程
1)变量设定规则
-
变量与变量值以一个等号『=』来连结 如:myname=VBird
-
等号两边不能直接接空格符,如下所示为错误: 『myname = VBird』或『myname=VBird Tsai』
-
变量名称只能是英文字母与数字,但是开头字符不能是数字,如下为错误: 『2myname=VBird』
-
变量值若有空格符可使用双引号『"』或单引号『'』将变量值结合起来,但双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:『var="lang is $LANG"』则『echo $var』可得『lang is en_US』 单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:『var='lang is $LANG'』则『echo $var』可得『lang is $LANG』
-
转义字符 \
-
在一串指令中,还需要藉由其他的指令提供的信息,可以使用反单引号『`指令`』或『$(指令)』,如『version=$(uname -r)』再『echo $version』可得『2.6.18-128.el5』
-
若该变量为扩增变量内容时,则可用"$变量名称"或${变量}累加内容,如下所示: 『PATH="$PATH":/home/bin』
-
若该变量需要在其他子程序执行,则需要以export来使变量变成环境发量: 『export PATH』
-
通常大写字符为系统默认变量,自行设定变量可以使用小写字符
-
取消变量的方法 unset
几个比较重要的变量
1)PS1
提示字符
2)$
echo $$ 输出PID
3) ?
上个执行指令的回传值
执行指令时,这些指令都会回传一个执行后的代码,一般来说,成功执行该指令,回传0。执行过程中发生错误,就会回传错误代码
4)locale 影响显示结果的语系变量
5)变量键盘读取、数组、声明
read [-pt] variable
-p :后面可以接提示字符!
-t :后面可以接等待的『秒数!』这个比较有趣~不会一直等待使用者啦!
变量声明
declare [-aixr] variable
-a :将后面名为 variable 的变量定义成为数组 (array) 类型
-i :将后面名为 variable 的变量定义成为整数数字 (integer) 类型
-x :用法与 export 一样,就是将后面的variable 变成环境发量;
-r :将变量设定成为 readonly 类型,该变量不可被更改内容,也不能 unset
declare +x 是对declare -x的逆操作
myname[1]=a
myname[2]=b
echo "${myname[1]}"
注:默认情况下,bash变量类型默认是字符串,bash环境中的数值运算,预设仅能到达整型形态
变量值【内容】的删除与替换
变量赋值
myname=a
变量myname存在,则将myname的值赋给myname1,变量myname不存在则将字符串b赋值给myname1
myname1=${myname-b}
变量myname存在并且不为空,则将myname的值赋给myname1,变量myname不存在则将字符串b赋值给myname1
myname1=${myname:-b}
文件系统与程序的限制
ulimit [-SHacdfltu] [配额]
历史命令
history
!number
执行第number条指令
!command
由最近的指令向前搜寻『指令串开头为 command』的那个指令, 并执行;
!!
执行上一个指令
指令的执行顺序
login与non-login shell
读取的配置文件数据不一样
login shell只读取一下两个配置文件
1. /etc/profile:这是系统整体的设定,最好不要修改这个档案;
2. ~/.bash_profile或~/.bash_login或~/.profile:(按顺序读取,前边的存在就不会读取后边的了)属于使用者个人设定,要改自己的数据,就写入这里!
source :读入环境配置文件的指令
由于/etc/profile 与 ~/.bash_profile都是在取得login shell的时候才会读取的配置文件,所以, 如果 你将自己的偏好设置写入上述的档案后,通常都是得注销再登入后,该设置才会生效。那么,能不能直 接读取配置文件而不注销登入呢? 可以的!那就得要用到 source 这个指令了!
non-login shell
当取得non-login shell的时候 该bash配置文件仅会读取 ~/.bashrc
bash中的通配符与特殊符号
数据流重导向
垃圾桶黑洞与特殊写法
如果不想显示或存储输出,可以将数据流重导向到/dev/null装置
ls -l /etc/xx 2> /dev/null
将标准输出和标准错误输出都写入output.txt
ls -l / output.txt 2>&1
命令执行的判断依据
; , &&, ||
一次执行多个命令的两种方式,一:写一个脚本,执行多个指令。二:命令行下,分号分割多个执行,例如: sync; sync; shutdown -h now。
管线命令
|
摘取命令
cut、grep
例如:
echo $PATH | cut -d ':' -f 5
echo $PATH | cut -d ':' -f 2,5
echo $PATH | cut -c 12-
echo $PATH | cut -c 12-20
cut 主要的用途在于将『同一行里面的数据进行分解』
cut 是将一行讯息当中,取出某部分我们想要的,而 grep 则是分析一行讯息, 若当中有我们所 需要的信息,就将该行拿出来
排序命令
sort
统计文档中行数、字数、字符数
wc
双向重定向
tee
tee 会同时将数据流分送到档案去不屏幕
字符转换命令: tr, col, join, paste, expand
可以用来删除一段讯息当中的文字,获取是进行文字讯息的替换
col
join
paste
expand
分割命令
split
参数替换
xargs