gwuj 发表于 2018-8-29 09:58:51

shell基础 4月8日课程笔记

  shell基础
  1. shell特性
  查看命令历史
  history
  重复上一个命令
  !!
  !$
  执行命令历史中第多少条命令
  !n
# !154  执行命令历史中以某个字符开头的命令
  !字符
  # !c #执行命令历史中以c开头的命令
  Tab 键可以补全文件路径或者命令
  设置别名
  aliasa=“b”
  取消别名
  unalias a
  *:通配符,匹配零个或多个字符
  ?:匹配一个字符
  >:输入重定向
# cat /etc/passwd >1.txt  >>:追加
# echo "123456">>1.txt  把123456追加到1.txt中
  :错误定向
# cat wang >2.txt 2>3.txt  
# cat 3.txt
  如果cat这个命令执行正确就把结果定向到2.txt,如果不正确就是定向到3.txt中。就是执行cat wang这个命令的
  时候不让他出现任何的提示,把所有的提示都全部重定向到对的和错的中去
  2>>:错误追加
  |:管道符号
  就是把管道前面的命令输出作为管道后面命令的输入
# cat /etc/passwd|less  作业控制
  sleep:制定暂停的时间
  sleep 100:休眠100秒
  ctrl+z:暂停作业
  jobs:查看被暂停或者在后台的运行的任务
  fg:恢复暂停或者休眠的任务
  当有多个任务的时候,在fg后面更数字几就表示恢复第几个任务,默认是恢复优先级搞的
  也就是任务前面带有“+”号的
  bg:把暂停的任务放在后台运行起来
  2. 变量
  系统变量名都是大写,echo 可以查看变量名
  env 可以列出当前用户的所有环境变量以及用户自定义全局变量
  set命令可以把所有变量列出来包括系统的和自定义的全局变量以及当前shell自定义变量,自定义的变量只能在当前shell中生效
  linux下设置自定义变量规则:
  (1)格式为 “a=b”, 其中a为变量名,b为变量的内容,等号两边不能有空格;
  (2)变量名只能由英、数字以及下划线组成,而且不能以数字开头;
  (3)当变量内容带有特殊字符(如空格)时,需要加上单引号;
  (4)如果变量内容中需要用到其他命令运行结果则可以使用反引号;
  (5)变量内容可以累加其他变量的内容,需要加双引号;
  export:声明变量
  全局变量,就是系统内所有用户登录后都能使用该变量
  具体设置:
  (1)在/etc/profile文件的末尾加入export a=cheng
  (2)运行source /etc/profile永久生效
  用户变量,就是指只对当前用户生效和使用的变量
  具体设置:
  (1)在用户的主目录下的.bashrc文件末尾加上export a=cheng
  (2)运行source .bashrc 生效
  export a=cheng是全局变量,export 不加任何选项表示,声明所有的环境变量以及用户自定义变量
  取消用户自定义变量
  unset 变量名
  取消a的变量
# unset a  3. 系统和个人环境变量的配置文件
  /etc/profile文件中预设的变量:
  PATH, USER, LOGNAME, MAIL, INPUTRC, HOSTNAME, HISTSIZE, umask等
  /etc/bashrc:这个文件主要预设umask和PS1
  # echo $PS1
  [\u@\h \W]\$
  \u:用户
  \h:主机名
  \W:当前目录
  \$:指的是这个”#$“中的一个
  PS1可以指定更改这个"#"的显示
  现在更改一下:
  PS1='[\h@\u \W] \$'
#PS1='[\h@\u \W] \$'  
#
  注意看“#”和“ #”的区别,这个就是PS1的作用吧
  恢复就这样子写:
#PS1='[\u@\h \W]\$'  
#
  umask :以后如果设置umask修改 /etc/profile 不要改这个文件
  .bash_profile :用户自己的环境变量
  .bashrc:当用户登录时以及每次打开新的shell时, 执行该文件
  .bash_history :记录命令历史用的
  .bash_logout :当退出shell时,会执行该文件。
  4. shell中的特殊符号
  * :匹配符号,零个或多个任意字符
  ? :匹配符号,1个任意的字符
  # :注视说明用的,使后面的内容失去原本的意义
  \ :脱义字符,将特殊字符还原为普通字符
  |:将符号前面命令的结果丢给符号后面的命令,一般针对文档操作的命令比较常用,
  例如cat, less, head, tail, grep, cut, sort, wc, uniq, tee, tr, split, sed, awk等等
  $:引用变量,还有 !$
  ; :分号,多条命令写一行时,分隔命令
  ~ :用户家目录
  & :放到命令最后面,让命令在后台运行
  >, >>, 2>, 2>>[错误]重定向,追加[错误]重定向
  [ ] 中括号,中间为字符组合,代表中间字符中的任意一个 ls 1.txt
  5. 常用命令:
  1)cut
  语法: cut -d ‘分隔字符’ [-cf] n 这里的n是正整数
  -d 后面指定分隔符,用单引号引起来-f 指定第几段
  #cut -d ':'-f 1 /etc/passwd |head -n 5
  root
  bin
  daemon
  adm
  lp
  这个是把passwd文件以冒号(:)作为分隔符,显示第一段,然后使用管道来显示前面的5行
  -c 后面只有一个数字表示截取第几个字符
  head -n2 /etc/passwd|cut -c2
#head -n2 /etc/passwd|cut -c2  
o
  
i
  显示passwd文件的前两行的第2个字符
  -c 后面跟一个数字区域,表示截取从几到几
  head -n2 /etc/passwd|cut -c2-5
#head -n2 /etc/passwd|cut -c2-5  
oot:
  
in:x
  显示passwd文件的前两行的第2个字符到第5个字符
  2)sort用作排序
  语法: sort [-t 分隔符] [-kn1,n2] [-nru](n1,比重定向多了一个功能,在把文件写入后面所跟的文件中的同时,
  还显示在屏幕上,不过tee常用语管道“|”后面。
#echo "1111" |tee 1.txt  
1111
  6)tr 用来替换字符
  最常用的就是大小写转换:
  head -n2 /etc/passwd |tr '' ''
# head -n2 /etc/passwd |tr '' ''  
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
  
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
  把passwd文件中的小写字母全部换成大写
  tr 替换一个字符也是可以的
  grep 'root' /etc/passwd |tr 'r' 'R'
# grep 'root' /etc/passwd |tr 'r' 'R'  
Root:x:0:0:Root:/Root:/bin/bash
  
opeRatoR:x:11:0:opeRatoR:/Root:/sbin/nologin
  把passwd文件中的r小写字母换成大写R
  7)split 切割大文件用的
  默认会以xaa, xab, …这样的形式定义分隔后的文件名
  -b : 按大小来分割单位为byte
  split -b50 passwd
#split -b50 passwd  
#ls
  
passwdxabxadxafxahxajxalxanxapxarxatxavxaxxaz
  
xaa   xacxaexagxaixakxamxaoxaqxasxauxawxay
  指定文件名
  split -b50 1.txt 123
#split -b50 passwd 123  
#ls
  
123aa123ac123ae123ag123ai123ak123am123ao123aq123as123au123aw123aypasswd
  
123ab123ad123af123ah123aj123al123an123ap123ar123at123av123ax123az
  -l : 按行数分隔
  split -l10 file
#split -l10 passwd  
#ls
  
passwdxaaxabxac
  以10行为一块来分passwd文件
  6. && 和 ||
  command1 ; command2前面命令是否执行完成都会执行后面命令
  command1 && command2 只有前面命令执行成功才会执行后面命令
  command1 || command2只有前面命令不成功再去执行后面命令
  小白学习笔记,不足之处还请大神指正!!


页: [1]
查看完整版本: shell基础 4月8日课程笔记