shell变量,环境变量配置文件,shell特殊符号cut命令,sort_wc_uniq命令,tee_tr_split命令,shell特殊符号

shell变量

  • 使用 env 命令能够查看系统变量的信息
  • 下面大写字母的变量名称就是系统的变量
  • 变量的值多是 数字 也多是 字符串
  • env 能够查看系统经常使用的环境变量

  • 除了系统的环境变量外,用户还能够自定义一些变量
  • a = 111 表示为变量a赋值111,这样就自定义了一个变量 a
  • echo $a 能够把 a 的值显示出来
  • set 命令能够查看系统内全部的变量,env只能查看系统内置的变量
  • set |grep 111 就能够在系统全部变量里面筛选出跟111有关的信息
  • 能够看到,a=111 的信息被查出来了
  • 也可使用 set |less ,也就是用less来查看set出来的变量信息
  • 自定义变量只有set才能看到

  • 自定义变量规则,变量名称可使用 字母,数字,下划线,首字符不能是数字
  • 变量的值若是含有特殊符号,须要用单引号括起来
  • 如图,给变量 a 赋值 as$g ,这个值里面含有 $ 符号,这就是特殊符号
  • 若是不用单引号括起来,会不生效
  • 若是变量值含有特殊符号如 $ ,空格 之类的就须要单引号括起来

  • 上图,定义了变量 a=1 b=2
  • echo $a$b 就是按照命令顺序同时显示a与b的值
  • 结果就是 12
  • 上图定义了变量 c ,值为 "a$bc"
  • 这里由于值里面有特殊符号 $ ,因此想生效要用单引号括起来
  • 可是这里使用了双引号,因此 $ 和 $后面的 bc 是不生效的
  • 因此实际赋予 c 的值只有 a

  • 如图,对 c 从新赋值 "a$b"c
  • 这里仍是使用了双引号,$b 会被当作命令来处理
  • $b 就是 b 的值的意思
  • 这里首先 a会赋值给c,而后$b也就是b的值为2也会赋值给c
  • 最后是 c 会赋值给 c
  • 因此 c 的值就是 a2c

  • 因此若是想要多个变量一块儿赋值的话能够这样写
  • c="$a""$b" ,就是使用双引号单独把变量括起来
  • 若是使用单引号 '$a' ,那么就会被识别为字符串而不是命令
  • 用双引号的话就能够被识别为命令
  • 因此想使用变量的话,能够单独用双引号把变量括起来

  • 使用 w 查看用户信息
  • 看到有3个用户链接
  • 使用 echo $SSH_TTY 能够知道当前用户是哪个
  • 下面的值是 /dev/pts/1 也就是 pts/1 就是当前用户

  • 使用命令 yum install -y psmisc 安装 psmisc 包
  • 安装完成后,就可使用 pstree 命令
  • 如图,能够查看当前所在的 bash
  • 由于使用了两个虚拟终端进行链接,能够看到有两条bash
  • 使用 bash 命令能够在当前shell下面再生成一个shell
  • 如图,能够看到,在第一个bash后面又多了一层bash,这就是新生成的
  • 使用 pstree 命令就能够看到本身在哪一层 bash 下面

  • 局部变量只能在当前的 bash 下面使用
  • 若是像上面同样,生成多层的 bash
  • 其它层的 bash 是没法使用当前bash定义的局部变量的
  • 若是但愿全部层均可以使用一个变量
  • 就须要把这个变量定义为 全局变量
  • 如图,使用 export 就能够把 b 定义为全局变量
  • 可是全局变量只对 子bash 有效,也就是向下有效
  • 在一个 bash 里面定义一个全局变量,这个bash下面不管多少层bash,都是有效的
  • 可是若是这个bash上面还有bash,也就是 父bash,是无效的
  • 全局变量对上层是无效的,只对下层有效

  • 如图,这里是两条并列的sshd
  • 若是在第一个sshd后面的bash里面定义一个全局变量
  • 对第二个sshd里面的bash是无效的
  • 两个 sshd 之间是不交互的
  • 全局变量只在同一条sshd里面是有效的
  • 若是要退出一层bash,可使用命令 exit
  • 这样就能够退到上一层的bash里面
  • 若是已是最后一层,那么就会之间退出登陆状态

  • 设置了一个变量,若是不想要了,想取消掉
  • 可使用 unset + 变量名 就能够把变量取消掉
  • unset aming 就把变量 aming 取消掉了

环境变量配置文件

  • 能够分两个层次看以上文件,etc下面的是系统层次文件
  • ~/ 下面的是用户层次的文件
  • 通常不修改etc下面这两个配置文件
  • 若是有须要修改配置文件,能够编辑用户家目录下面的配置文件,也就是~/下面的
  • 如 .bash_profile
  • 修改完配置文件后须要从新加载才会生效,可使用 source + 配置文件名称 从新加载
  • 也可使用 . 代替 source
  • 如图, . .bash_profile == source .bash_profile
  • bashrc 几乎全部配置文件都会调用这个配置文件
  • 无论登不登陆,bashrc 都会被调用
  • 用户登陆时虽然调用profile,但实际上profile里面仍是会调用bashrc
  • 家目录下的配置文件调用的时候也会调用bashrc
  • .bash_logout 配置文件能够配置退出登陆的时候执行的命令

  • 有一个系统变量叫作 PS1
  • 这个变量存在于 /etc/bashrc 文件里面,能够用vim打开使用搜索 /PS1 找到
  • 也可使用 echo $PS1 显示出这个变量的值
  • 如图,变量值是 [\u@\h \w]$
  • 其中, \u 是当前用户名 , \h 是hostname
  • \W 是当前目录名称,$ 就是#的位置
  • PS1的值是能够修改的
  • 如图,PS1的值修改成 '<\u@\h \w> $'
  • 小写 w 会显示绝对路径
  • 赋值的时候,由于含有特殊符号 @,$等,因此要用单引号括起来
  • 符号 $ 在root用户会显示为#号,普通用户就显示为$号
  • 如图,PS1还能够设置颜色
  • 执行shell脚本会使用 PS2 来显示

shell特殊符_cut命令

  • 星号 * 能够表示 任意个任意字符
  • 问号 ? 只表示一个字符,能够是任意字符,*是多个
  • 井号 # 表明注释,一行前面写#,这一行就会被系统忽略掉,不会执行
  • 脱义字符能够把系统里面的特殊符号显示为字符串
  • 例子,a=1, b=$a 这就把 a 的值赋给了 b
  • 若是使用脱义符, b=$a ,那么 b 的值就变成了 $a
  • 也就是说把原本不能识别为字符的 $ 变成了字符

  • 管道符 | 配合 cut 命令使用,cut能够截取字符串
  • 第一段是显示 passwd 的头两行
  • cat /etc/passwd |head -2 |cut -d ":" -f 1
  • 首先cat命令的结果传给了head命令
  • head命令的结果又传给cut命令
  • cut 命令里面,-d参数表明分隔符,这里设置为 ":"
  • 表明使用 : 对head命令的结果进行分隔
  • 参数 -f 表明段号,1就是取第一段数据
  • 1,2 表明第一第二段数据
  • 1-3 表明1到3段数据
  • 还有一个参数 -c 能够直接指定截取某个位置的字符
  • 例如 cut -c 4 就表示截取第4个字符

sort_wc_uniq命令

  • sort 命令能够对数据进行排序
  • 排序顺序是按照字符编码里面的id大小来排序的
  • 如图,passwd 里面的数据按照 a-z 的顺序进行了排序显示
  • sort -n ,参数 -n 可使内容按照数字来排序
  • 字母跟特殊字符所有算做 0 ,
  • 因此首字符不是数字的数据行会出如今最前面
  • 其它的数据按照数字大小来排序
  • sort -nr 参数 -r 能够倒序排序

  • wc -l 能够统计文件数据的行数
  • wc -m 能够统计文件的字符数
  • 参数 -m 会把换行符,空格等特殊字符的数量也统计在内
  • wc -w 能够统计文件的词数
  • 词数是按照空白字符来分隔的,好比换行符,空格之类的

  • uniq 命令能够把数据内重复的数据去掉
  • 好比1.txt里面有数据 1 ,1 ,2 ,3
  • 使用 uniq 1.txt 就能够把重复的1去掉,只留下一个1
  • 可是uniq有一个问题,就是只能去除连续的重复数据
  • 好比数据有 1,2,1,3 ,这里uniq就不能把1去掉
  • 由于这两个1不是连续的,中间有2隔着,这样uniq就没法去重
  • 因此通常使用uniq都须要先sort排序一下
  • 这样就可使重复的数据连续的排列,这样uniq就能够生效了
  • 如图,先sort而后经过管道符|传给uniq命令
  • 参数 -c 能够统计重复的个数
  • 图中,1 的左边是 2 ,表示1这个数据总共存在两个相同的数据
  • 左边是1的数据,表示这个数据只有一个,没有重复的

tee_tr_split命令

  • 第一行 >a.txt 就能够把空字符重定向到a.txt里面,这样就清空了a.txt
  • cat a.txt 什么都没显示
  • 第三行,sort 而后 uniq ,而后 tee a.txt
  • 意思是把前面的结果重定向到 a.txt 并把重定向的内容显示在下面
  • tee 命令就是能够在重定向的同时,把内容显示在下面
  • tee 命令还有一个参数 -a
  • sort2.txt |uniq -c |tee -a a.txt
  • 能够把前面的结果追加到 a.txt 里面
  • tee命令原本是重定向并显示结果,a参数能够把重定向变为追加
  • 而后把追加的内容显示在下面

  • tr 命令能够替换字符
  • 如图,echo "aminglinux" |tr '[al]' '[AL]'
  • 这样就能够把a与l变成大写
  • 第二行就是单个字符替换
  • 第三行能够把全部字母换成大写
  • 最后一行把全部字母替换成 1

  • spilt是用来切割文件的,把大文件切割成小文件
  • 有两种用法,一种是按大小切割,一种是按数据的行数切割
  • 如图 split -b 100M bigfile 就是按大小切割
  • 按照每一份 100MB 的大小来切割文件
  • 参数 -b 就是指定按大小切割的选项
  • 100M 也能够不写单位,不过这样的话,默认单位就是比特
  • 不写单位会按照默认单位比特来切割
  • 参数 -l 就是指定切割方式按行来切割
  • 1000 就表示每1000行数据切割成一份
  • 默认的切割后的文件名都以 x 开头
  • 命令还能够设置自定义文件名前缀
  • 如图,后面加上 abc
  • 下面查看切割后的文件,能够看到
  • 下面3个文件都是以abc开头

shell特殊符号下

  • 如上图,同一行写多条命令的时候,使用分号 ; 来分隔
  • 分号分隔以后,系统就能够识别这是两条命令
  • 若是不分隔系统会觉得是一条命令
  • ||表明或者,&&表明与
  • 使用 || 的时候,若是前面执行结果为true,后面就不执行了
  • 若是前面为 false 后面会继续执行
  • 使用 && 的时候,若是前面执行结果为false,后面就不执行了
  • 若是前面为 true 后面才会继续执行
  • 符号 || 和 && 是在命令之间使用的
相关文章
相关标签/搜索