首页 > 代码库 > linux--bash

linux--bash

下面是最近学习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=‘[\u@\h \w \A #\#]\$‘  --> [root@www /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 -

linux--bash