特殊shell变量
1、环境变量:
环境变量是指系统本身运行需要由liunx系统提前创建好的一类变量。
主要用于用户的工作环境,包括(用户的宿主目录,命令的查找路径,用户的当前目录,登陆的终端等)环境变量的值由操作系统本身自己维护,随着用户的状态改变而改变。
env调取当前环境变量
[root@xlous ~]# env
XDG_SESSION_ID=2
HOSTNAME=xlous.com
SELINUX_ROLE_REQUESTED=
TERM=linux
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.1.116 51516 22
SELINUX_USE_CURRENT_RANGE=
SSH_TTY=/dev/pts/1
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
LANG=zh_CN.UTF-8
SELINUX_LEVEL_REQUESTED=
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
SSH_CONNECTION=192.168.1.116 51516 192.168.1.175 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
DISPLAY=localhost:10.0
_=/usr/bin/env
pwd命令就是调用了这个变量才能进行输出
$PWD
root@xlous etc]# echo $PWD
/etc
[root@xlous etc]# cd
[root@xlous ~]# pwd
/root
$PATH 定义命令的默认搜索路径
[root@xlous ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
注:只有自己执行的命令在PATH变量包括的目录下,才可以直接使用并使用tab补齐。如果不在PATH所包括的路径下,只能通过绝对路径或相对路径使用。
[root@xlous ~]# echo $USER
root
[root@xlous ~]# echo $SHELL
/bin/bash
[root@xlous ~]# echo $HOME
/root
[root@xlous ~]# echo $LANG
zh_CN.UTF-8
[root@xlous ~]#PATH =“$PATH:/root ”
例:将我们所写的脚本放到$PATH的默认搜索路径中去
1、将/root目录写入到PATH的环境变量中,但是还没有永久生效
[root@xlous ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
2、永久生效:
vim /etc/profile
PATH =“$PATH:/root ”
只root用户生效:
vim /root/.bash_profile #在最后追加
PATH =“$PATH:/root ”
#需要重启系统,
#立即生效:
[root@xlous ~]# source /etc/profile
3、预定义变量
$#:命令行中位置变量的个数(程序执行了几个位置参数)
$*:所有位置变量的内容(具体的内容 比如/boot 就是一个具体的内容)
$?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错
判断是否出现错误正常为0异常错误为非0取值在1-127之间
$0:当前执行的进程/程序名(就是当前执行的命令或程序的名字)
!$:表示上一个命令的最后一个参数
sed和awk
sed
strem editor流编辑器
sed 编辑器是一行一行的处理文件内容的。正在处理的内容存放在模式空间(缓冲区)内,处理完成后按照选项的
规定进行输出或文件的修改。
sed主要用来自动编辑一个或多个文件;简化对文件的反复操作; 非交互式编译文件
语法:
sed [options] [command] [filename]
options:
-n 抑制自动(默认的)输出 读取下一个输入行,-n 要读取的行号
-e 执行多个sed指令
-f 运行脚本
-i 编辑文件内容
-i.bak 编辑的同时创造.bak的备份
-r 使用扩展的正则表达式
command:
a 在匹配后追加
i 在匹配后插入
p 打印
d 删除
r/R 读取文件/一行
w 另存
s 查找
c 替换
y 替换
h/H 复制拷贝/追加模式空间(缓冲区)到存放空间
g/G 粘贴 从存放空间取回/追加到模式空间
x 两个空间内容的交换
n/N 拷贝/追加下一行内容到当前
D 删除\n 之前的内容
p 打印\n 之前的内容
b 无条件跳转
t 满足匹配后的跳转
T 不满足匹配时跳转
[root@xlous ~]# sed -n 3p /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@xlous ~]# sed -n '1,3p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@xlous ~]# sed -n '1,3!p' /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
awk
AWK是一种优良的文本处理工具,linux及Unix环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言的最大功能取决于一个人所拥有的知识。awk命名:AIfred Aho Peter Weinberger和brian kernighan三个人的姓的速写
最简单地说,awk是一种用于处理文本的编程语言工具
任何awk语句都是由模式和动作组成,一个awk脚本可以有多个语句。模式决定动作语句的触发条件和触发时间。
特殊字段:
BEGIN语句设置计数和打印头部信息,在任何动作之前进行。
END语句输出统计结果,在完成动作之后执行。
分隔符默认是空格,可以用-F,改变成逗号为分隔符-F,或改成冒号 -F;
准备要显示内容;
[root@xlous ~]# vim result.txt
andy 4 85 92 78 94 88
bob 6 89 90 75 90 87
claire 9 84 88 80 93 84
dave 5 94 52 84 86 NA
显示所有内容;
awk"{print $0}"result.txt
显示第一列内容;
awk"{print $1}"result.txt
显示/etc/passwd第一行,以:作为分隔符
[root@xlous ~]# awk -F:'{print $1}'/etc/passwd