mender Bash学习笔记 Jun 15, 2013 16:49:53
-
-
命令的别名alias,取消别名用unalias
#alias ..='su -'
-
察看命令是否为bash内建命令 type
#type -a su
su 是 `su -' 的别名
su 是 /bin/su
-
变量设定 =
-
变量只能以字母开头,字母和数字组成
-
变量内容若有空格可以使用双引号“”或单引号括起来,
双引号内的图书字符可保留原本的特性,
单引号内的特殊字符都视为纯文本
-
在一串指令中,还要藉由其他的指令提供的信息,可以使用反单引号或者小括号
version=`uname -r` 或者 version=$(uname -r)
-
若该变量需要在其他子程序执行,则需要用export来使变量变成环境变量
-
取消变量的方法为使用unset
-
-
察看环境变量 env
-
常见环境变量介绍
-
HOME:家目录
-
SHELL:当前使用的shell程序
-
HSITSIZE:shell命令历史记录大小
-
MAIL:mailbox信箱目录
-
PATH:存放执行文件搜寻路径
-
LANG:存放语言信息,例如en_US.UTF-8,表示美式英语,UTF-8编码
-
RANDOM:随机数变量,可以用$RANDOM来取得一个随机数,大小介于0~32767之间
想要生成0~9的随机数只要:
declare -i number=${RANDOM}%10
echo $number
-
-
察看所有的变量 set
-
常见bash变量介绍
-
PS1:提示符的设定
\H 完整的主机名
\h 仅显示主机名在第一个小数点之前的名字
\u 目前使用者的帐号
\w 完整的工作目录名称,由跟目录写起的目录名称,家目录为~
\W 利用basename函数取得工作目录名称,仅仅显示最后一个目录名
\# 下达的第几个指令
\$ 提示字符,如果是root,为#,否则$
常见设定为PS1='\u@\h:\w\$'
-
$: shell的PID
#echo $$
-
?: 关于上个执行指令的回传值
一般,成功为0,失败为错误代码
-
OSTYPE: 操作系统类型,例如linux-gnu
-
HOSTTYPE: 主机CPU类型,例如i686
目前个人计算机的CPU主要分为32/64位,
其中32位有可以分为i386, i586, i686,
而64位则称为x86_64。
由于不同等级的CPU指令集不太相同,所以软件也有i386/i686和x84_64之分
-
MACHTYPE: 硬件等级,例如i686-pc-linux-gnu
-
-
察看系统支持的语言系统和编码系统 local
#local -a
C
C.UTF-8
en_AG
en_AG.utf8
#local
LANG=en_US.UTF-8
LANGUAGE=en_US:zh_CN:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=en_US.UTF-8
-
键盘读取 read
read [-pt] variable
-p 后面可以接提示字符
-t 后面可以接等待的秒数
-
bash变量定义和显示 declare
declare [-aixr] variable
-a 定义数组
-i 定义整数
-x 定义环境变量
-r 定义只读变量
将以上的-改为+可以进行取消
-
限制用户可使用的某些系统资源数量 ulimit
ulimit [-Shacdfltu] [配额]
-H hard limit
-S soft limit
-a 后面不接任何参数,可列出所有限制额度
-c core file的最大容量
-f shell可以建立的最大单一文件容量,单位是kb
-d 可以使用的最大段数量
-l 可以用于锁定的内存容量
-t 可以使用的最大CPU时间,单位秒
-u 单一用户可以使用的最大程序数量
-
变量内容的取代与删除
${变量#关键词} 从头开始查找符合的关键词,并将符合的最短数据删除
${变量##关键词} 从头开始查找符合的关键词,并将符合的最长数据删除
${变量%关键词} 从尾开始查找符合的关键词,并将符合的最短数据删除
${变量%%关键词} 从尾开始查找符合的关键词,并将符合的最长数据删除
${变量/旧串/新串} 将第一个旧串用新串来替代
${变量//旧串/新串} 将全部旧串用新串来替代
最好用”“来把字符串括起来
-
变量测试与内容替换new_var=${old-content}
-
var=${str-expr}
当str非空时,var=$str;
当str为空时, var被设为空;
当str未定义时,var=expr;
-
var=${str:-expr}
当str非空时,var=$str;
当str为空时,var=expr;
当str未定义时,var=expr;
-
-
历史命令 history
history n 列出最近输入的n条shell命令;
history -c 清除shell中全部history内容;
history -r histfile 将histfile中的内容读到history记忆中;
history -a 将history中新增加的指令追加到histfile,若没有加histfile,则写入~/.bash_history中;
history -w 将目前history记忆内容写入到histfiles中。
当我们以bash登入linux后,系统会从~/.bash_history读取以前下过的指令,文件中记录的个数取决于$HISTFILESIZE。注销时,系统会把本次登陆所下达的命令追加到~/.bash_history中。如果超出最大限制,会丢掉旧的记录
-
执行历史命令 !
!number 执行第number个历史指令;
!command 由最近的指令向前搜寻指令串开头为command的那个指令,并执行;
!! 执行上一个指令
-
指令的搜索顺序
-
以相对/绝对路径执行的指令
-
由alias找到的指令
-
由bash builtin 的指令
-
通过$PATH找到的第一个指令
-
-
bash的进站欢迎信息:/etc/issue,/etc/motd
-
login shell的读取流程:
-
/etc/profile
-
~/.bash_proflie or ~/.bash_login(如果有这两个文件)
-
若没有2中的文件,则读.profile
-
-
读入环境配置文件的指令 source
-
non-login shell的读取流程
读取~/.bashrc
-
bash中的通配符
-
* 代表0到无穷多个任意字符
-
? 代表一定有一个任意字符
-
[] 代表一定有一个括号内的字符,例如[abcd]
-
[-] 代表在编码顺序内的所有字符,例如[0-9]
-
[^] 代表一定有一个不是括号里的字符,例如[^abc]
-
-
输出数据流重定向
-
1> 以覆盖的方式将standard output输出到制定的文件或装置上
-
1>> 以追加的方式将standard output输出到制定的文件或装置上
-
2> 以覆盖的方式将standard error output输出到制定的文件或装置上
-
2>> 以追加的方式将standard error output输出到制定的文件或装置上
-
>/dev/null将数据流丢弃
-
> list 2>&1将正确和错误的信息都输出到同一个文件中
-
-
输入数据流重定向
cat > file << “eof” 将键盘的输入放到file中,且当输入eof时,结束输入
-
执行的判断依据
-
; command1;command2;command3各个指令顺序执行
-
&& cmd1&&cmd2 只有当cmd1成功了才执行cmd2
-
|| cmd1||cmd2 只有当cmd1失败了才执行cmd2
-
-
管线命令 |,用来接收上个指令的standard output
-
撷取命令cut
将一段讯息的某段切出来,以行为单位处理
-
cut -d '分隔符' -f fields,用分隔符分隔讯息,并取出第fields段
echo $PATH | cut -d '': -f 3,5
-
cut -c 字符区间,以字符的单位取出固定字符区间
export | cut -c 12- 取出第12个字符开始到行尾的字符串
-
-
撷取命令grep
如果信息中有满足要就的,就取出该行
grep [-acinv] [--color=auto] '搜寻的字符串' filename
-
-a 将binary文件以text文件的方式搜寻数据
-
-c 计算找到'搜寻字符串' 的次数
-
-i 忽略大小写的不同
-
-n 顺便输出行号
-
-v 反向选择,将显示没有'搜寻字符串'内容的那一行
-
-
排序 sort
sort [选项] [file or stdin]
-
-f 忽略大小写差异
-
-b 忽略最前面的空格
-
-M 以月份字段来排序
-
-n 使用纯数字来排序,默认是按文字来排
-
-r 反向排序
-
-t 分隔符,默认tab
-
-k 按照那个field来排序,例如cat /etc/passwd|sort -t ':' -k 3 -n
-
-
去除重复的行uniq
uniq [-ic]
-
-i 忽略大小写的不同
-
-c 进行计数
-
-
统计字数wc
wc [-lwm]
-
-l 仅列出行数
-
-w 仅列出单词数
-
-m 仅列出字符数
-
-
双向重定向tee
tee [-a] file
-a 以追加的方式加入file中,否则会覆盖原文件
-
删除或取代讯息中的文字tr
-
tr -d SET1.. 删除SET1,例如 将DOS换行变为UNIX换行
cat file1 | tr -d '\r' > file2
-
tr -s SET1.. 去掉连续重复的字符,只保留一个
-
将小写换为大写last | tr [a-z] [A-Z]
-
-
分割数据split
split [-bl] flie PREFIX
-
-b 后面接欲分割成的文件的大小,单位可以是b,k,m等
-
-l 以行来进行分割
-
PREFIX 代表前导符,可作为分割文件名的前导文字
-
-
产生某个指令的参数xargs
find /sbin -perm + 7000 | xargs ls -l
-