下面是最近学习bash的一些知识点总结
***博客园-邦邦酱好***
取得shell来工作
登入动作,系统给一个shell:记录在/etc/passwd
查看系统版本
lsb_release -a
bash shell
1.命令编修能力:history
上下键:当前登陆下的前/后一个输入的指令,保存在内存中
~/.bash_history:记录前一次登入以前执行过的命令,注销系统后保存进这个文件
2.命令与档案补全功能:tab键
连续按两次[tab]键就能够显示所有癿可执行指令
如果想要知道系统当中所有以c为开头的指令呢?就按下『c[tab][tab]』
3.命令别名设定功能:alias
alias lm=‘ls -al‘
4.档案说明:type
type [-tpa] name
file:表示为外部指令
alias:表示为命令别名所设定的名称
builtin:表示为bash内建的指令
5.分行输入指令:\后紧接enter键
6.变量
引用变量:$variable 或者 ${variable}
设置变量:variable=othername(1.等号两边不能有空格 2.内容有空格,可用引号保留 3.特殊符号如enter,$,\,空格等可以用\变成一般字符)
注意:双引号可保留变量的内容,而单引号内的仅能是一般字符
如:name=A
myname="$nameB"
echo myname --->AB
myname=‘$nameB‘
echo myname --->$nameB
结合其他指令:version=$(uname -r) 或者version=`uname -r`(`是数字键1左边的那个按键,不是单引号)
此反引号内的指令会首先被执行,然后将结果作为外部的输入信息
比如:ls -l `locate crontab`(先locate再ls)
取消变量:unset variablename
使变量在子程序执行:export variable
7.环境变量:set命令可将bash内的变量都显示出来
(1)PS1=‘[\[email protected]\h \w \A #\#]\$‘ --> [[email protected] /home 17:02 #85]#
(2)$:关于本shell的PID -->echo $$
(3)?:关于上个执行指令的回传值 -->echo $?
(4)OSTYPE,HOSTTYPE,MACHTYPE:个人计算机CPU主要分为32/64位,其中32位又可分为i386, i586, i686,而64位则称为x86_64
(5)export:自定义变量转变成环境变量
8.影响显示结果的语系变量:locale
整体中文语系支持的编码:big5,utf-8
整体系统默认的语系定义:cat /etc/sysconfig/i18n
9.读取来自键盘的内容:read
read [-pt] variable
-->read -p "please keyin your name:" -t 30 named
10.宣告变量的类型:declare/typeset
declare [-aixr] variable
--->declare -i sum=100+300+50
--->echo $sum
--->450
11.数组(array)
设置:var[1]="small min"
12.删除变量内容
path=/user/ker/sbin;/user/ker/bin;/user/local/bin;/user/bin
(1)#:从左到右删除符合取代文字的【最短的】那一个
echo ${path#/*user/ker/bin;}
(2)##:从左到右删除符合取代文字的【最长的】那一个
echo ${path##/*;}
(3)%:从右到左删除符合取代文字的【最短的】那一个
echo ${path%;*bin}
(4)%%:从右到左删除符合取代文字的【最长的】那一个
echo ${path%%;bin}
13.取代变量内容
(1)/旧字符串/新字符串:从左到右第一个旧字符串会被新字符串取代
(2)//旧字符串/新字符串:全部的旧字符串会被新字符串取代
14.别名
设置:alias lm=‘ls -al|more‘
取消:unalias lm
15.历史命令:history
-->history [-raw] histfiles
默认历史位置:~/.bash_history
历史文件大小:echo $HISTSIZE
利用:!N-->执行第N个历史命令
!com-->执行最近历史中以com开头的命令
!!-->执行上一个历史命令
16.进站欢迎信息:/etc/issue
telnet时的登入信息:/etc/issue.net
17.login shell读取的配置文件
(1)/etc/profile:系统的整体设定,最好不要修改。
/etc/profile.d/*.sh 规范了bash操作接口的颜色,语系,ll与ls指令的命令别名,vi的命令别名等等。如果你需要帮所有使用者设定一些共享的命令别名时,可以在这个目录下自行建立扩展名为.sh的档案,并将所需要的数据写入即可。
1./etc/profile会遍历这个目录下的所有.sh文件
2.修改过这个目录下的文件后,需要重新登录,才能读入最新修改(source或者.命令可以使得配置马上生效)
(2)~/.bash_profile或~/.bash_login或~/.profile:属于使用者个人设定,要使用的数据可以写入这里
login shell的读取流程:
/etc/profile(-->/etc/inputrc,/etc/profile.d/*.sh-->/etc/sysconfig/i18n)----->~/.bash_profile(-->~/.bashrc-->/etc/bashrc)---->开始操作bash
18.数据流重导向
(1)标准输入:<或者<<
(2)标准输出:>或者>>
(3)标准错误输出:2>或者2>>
(4)垃圾桶黑洞:/dev/null(忽略掉错误信息,不显示不存储)
(5)正误同时输出:command > filename 2>&1或者command &> filename
1.创建新文本:
cat > newfile < oldfile
2.标定终止键盘输入的标志
cat > newfile << "end" (不用标志的话,ctrl+d键可以终止输入)
19.命令之间的相关性
(1)$?:前一个命令的返回值,正确执行$?=0
(2)cmd1&&cmd2:cmd1执行正确,则开始执行cmd2;cmd1执行失败,则不执行cmd2。
--> ls a.txt && echo "yes"
(3)cmd1||cmd2:cmd1执行正确,则不执行cmd2;cmd1执行失败,则开始执行cmd2。
--> ls a.txt || touch a.txt
a || b && c 从左到右顺序执行
(4)一次执行多个命令:命令与命令之间用;分号分隔。
ls;cat a.txt
20.管道命令pipe
1.切cut
echo $PATH|cut -d ‘;‘ -f 5 (切取PATH路径的第五个分隔)
export|cut -c 1- (以字符为单位,切取export第1个字符以后的所有字符串)
假如export是 ABC BCD,切取之后是BC CD
2.分析grep
grep [-acinv] ‘搜寻字符串‘ [--color=auto] filename
-a:把binary档案以text档案的方式搜索
-c:计算找到“搜寻字符串”的次数
-i:忽略大小写
-n:顺便输出行号
-v:反向选择,显示没有“搜寻字符串”内容的那一行
---->last|grep -v ‘root‘|cut -d ‘ ‘ -f 1
3.排序sort
sort [-fbrtk] [file or stdin]
-f:忽略大小写
-b:忽略最前面的空格符部分
-r:反向排序
-t:分隔符,预设是用tab键分隔
-k:以哪个区间来进行排序
--->cat /etc/passwd|sort -t ‘:‘ -k 3
4.重复的仅显示一个uniq
uniq [-ic]
-i:忽略大小写
-c:进行计数
--->last|cut -d ‘ ‘ -f1|sort|uniq -c
5.统计行数,字数,字符数wc
wc [-lwm]
-l:仅列出行数
-w:仅列出字数
-m:多少字符
--->last|grep [a-zA-Z]|grep -v ‘wtmp‘|wc -l
21.双向重导向tee
tee [-a] file -->将数据流分送到档案和屏幕
-a:以累加的方式,将数据加入file中
--->ls -l|tee -a list.txt|more
22.字符转换命令
1.删除一段信息中的文字或者进行信息中部分文字的替换tr
tr [-ds] SET1 [SET2]
-d:删除信息中的SET1这个字符串
-s:用SET2取代掉SET1
--->cat /etc/passwd|tr -d ‘r‘
--->last|tr [a-z] [A-Z] (所有小写替换成大写)
2.col[-xb]
-x:将tab键转换成对等的空格键
-b:在文字内有反斜杠时,仅保留反斜杠最后解的那个字符
--->cat /etc/man.config|col -x|cat -A|more
--->man col|col -b > /root/col.man
3.处理2个文档中有相同数据的那一行join
jion [-ti12] file1 file2
-t:默认以空格符分隔数据,并且对比第一个字段的数据,若相同,则将2笔数据联成一行,且把第一个字段放在第一个
-i:忽略大小写
-1:代表第一个file要用哪个字段来分析
-2:代表第二个file要用哪个字段来分析
--->jion -t ‘:‘ /etc/passwd /etc/shadow
--->jion -t ‘:‘ -1 4 /etc/passwd -2 3 /etc/group
注意:在进行jion操作前,先进行sort操作。
4.同一行贴一块paste
paste [-d] file1 file2
-d:后面接分隔字符,默认是[tab]键分隔
-:如果file部分写成-,表示来自standard input的资料的意思
5.tab键转换成空格expand
expand [-t]
-t:后接数字,定义一个tab键代表多少个字符
23.分割命令split
split [-bl] file PREFIX
-b:分割成的档案大小,可加单位b,k,m等
-l:以行数进行分割
PREFIX:代表前导符的意思,可作为分割档案的前导文字
--->ls -al /|split -l 10 -|sroot
24.减号-的用途
在管道命令中,常常会使用到前一个指令的stdout作为这次的stdin,某些指令需要用到文件名来进行处理时,该stdin与stdout可以利用减号-来替代。
--->tar -cvf - /home|tar -xvf -