变量
常见的变量:
PATH:决定shell在哪些目录下寻找命令和程序;
HOME:家目录;
PWD:当前目录;
LOGNAME:当前用户名称;
env命令:
查看常见变量;
HOSTNAME:表示主机的名称。
SHELL:表示当前用户的shell类型。
HISTSIZE:表示历史记录数。
MAIL:表示当前用户的邮件存放目录。
PATH:该变量决定了shell将到哪些目录中寻找命令或程序。
PWD:表示当前目录。
LANG:这是与语言相关的环境变量,多语言环境可以修改此环境变量。
HOME:表示当前用户的家目录。
set命令:
查看全部系统以及自己定义变量;
如果想让设定的环境变量永久有效,有以下两种方法:
允许系统内所有用户登录后都能使用该变量。具体的操作方法是:在/etc/profile文件的最后一行加入export myname=jinkai,然后运行source /etc/profile就可以生效了。此时再运行bash命令或者切换到其他账户
[root@jinkai01 ~]# echo "export myname=jinkai" >> /etc/profile
[root@jinkai01 ~]# source !$
source /etc/profile
[root@jinkai01 ~]# bash
[root@jinkai01 ~]# echo $myname
jinkai
[root@jinkai01 ~]# exit
exit
root@jinkai01 ~]# su - linuxprobe
[linuxprobe@jinkai01 ~]$ echo $myname
jinkai
如仅允许当前用户使用该变量。具体的操作方法是:在用户主目录下的.bashrc文件的最后一行加入export myname=jinkai,然后运行source .bashrc就可以生效了。这时再登录test账户,myname变量则不会生效了。这里source命令的作用是将目前设定的配置刷新,即不用注销再登录也能生效。
[root@jinkai01 ~]# echo "export myname=jinkai" >> .bashrc
[root@jinkai01 ~]# source .bashrc
[root@jinkai01 ~]# echo $myname
jinkai
[root@jinkai01 ~]# su - linuxprobe
Last login: Mon Aug 17 22:47:20 CST on pts/0
[linuxprobe@jinkai01 ~]$ echo $myname
[linuxprobe@jinkai01 ~]$
自定义的变量规则:
设定变量的格式为a=b,其中a为变量名,b为变量的内容,等号两边不能有空格。
变量名只能由字母、数字以及下划线组成,而且不能以数字开头。
当变量内容带有特殊字符(如空格)时,需要加上单引号。
实验1:特殊符号变量,必须加单引号;
[linuxprobe@jinkai01 ~]$ myname='jin kai'
[linuxprobe@jinkai01 ~]$ echo $myname
jin kai
实验2:变量内容本身带有单引号,这时就需要加双引号
[linuxprobe@jinkai01 ~]$ myname="jin'kai"
[linuxprobe@jinkai01 ~]$ echo $myname
jin'kai
实验3:如果变量内容中需要使用到其他命令,运行结果则可以使用反引号
[linuxprobe@jinkai01 ~]$ name=pwd
[linuxprobe@jinkai01 ~]$ echo $name
/home/linuxprobe
实验4:变量内容可以累加其他变量的内容,但需要加双引号
[root@jinkai01 ~]# b=2
[root@jinkai01 ~]# myname="$b"a
[root@jinkai01 ~]# echo $myname
2a
定义全局变量:
格式:
export [变量名]=[变量值]
[root@jinkai01 ~]# abc=123
[root@jinkai01 ~]# echo $abc
123
[root@jinkai01 ~]# bash
[root@jinkai01 ~]# echo $abc
#没有使用全局变量前,切换一个环境,变量不生效了
[root@jinkai01 ~]# exit
exit
[root@jinkai01 ~]# export abc
[root@jinkai01 ~]# echo $abc
123
[root@jinkai01 ~]# bash
[root@jinkai01 ~]# echo $abc
123 #设定全局变量后,切换环境,变量依然生效
取消全局变量:
格式:
unset [变量名]
[root@jinkai01 ~]# echo $abc
123
[root@jinkai01 ~]# unset abc
[root@jinkai01 ~]# echo $abc
[root@jinkai01 ~]#
pstree
pstree命令需要安装psmisc包;
yum -y install psmisc
查看当前所在bash
[root@jinkai01 ~]# pstree
systemd-+-NetworkManager---2[{NetworkManager}]
|-VGAuthService
|-agetty
|-auditd---{auditd}
|-crond
|-dbus-daemon---{dbus-daemon}
|-firewalld---{firewalld}
|-lvmetad
|-master-+-pickup
| `-qmgr
|-polkitd---6[{polkitd}]
|-rsyslogd---2[{rsyslogd}]
|-sshd---sshd---bash---pstree
|-systemd-journal
|-systemd-logind
|-systemd-udevd
|-tuned---4[{tuned}]
`-vmtoolsd---{vmtoolsd}
进入新bash
[root@jinkai01 ~]# bash
[root@jinkai01 ~]# pstree
systemd-+-NetworkManager---2[{NetworkManager}]
|-VGAuthService
|-agetty
|-auditd---{auditd}
|-crond
|-dbus-daemon---{dbus-daemon}
|-firewalld---{firewalld}
|-lvmetad
|-master-+-pickup
| `-qmgr
|-polkitd---6[{polkitd}]
|-rsyslogd---2[{rsyslogd}]
|-sshd---sshd---bash---bash---pstree
|-systemd-journal
|-systemd-logind
|-systemd-udevd
|-tuned---4[{tuned}]
`-vmtoolsd---{vmtoolsd}
退出
exit
环境变量
全局的变量(针对所有用户):
/etc/profile :用户环境变量、交互、登录才执行;
/etc/bashrc : 用户不用登录、执行shell就生效;(这个文件主要预设umask以及PS1)
个人用户home变量文件(只针对当前用户):
.bash_profile:该文件定义了用户的个人化路径与环境变量的文件名称。每个用户都可使用 该文件输入专属于自己的shell信息,当用户登录时,该文件仅仅执行一次。
.bashrc:该文件包含专属于自己的shell的bash信息,当登录或每次打开新的shell时,该文件 会被读取。例如,你可以将用户自定义的别名或者自定义变量写到这个文件中。
.bash_history:该文件用于记录命令历史。
.bash_logout:当退出shell时,会执行该文件。你可以将一些清理的工作放到这个文件中。
PS1变量
当我们登录系统后,命令的最左边会显示:
[root@jinkai01 ~]#
怎样控制这个显示,那么就要说到PS1变量;
PS1变量定义在 /etc/bashrc 文件下面;
[root@jinkai01 ~]# echo $PS1
[\u@\h \W]\$
[root@jinkai01 ~]#
u@:代表用户名
h:代表hostname
W:代表最后一个路径
注意:可将大W改小w 显示为绝对完全路径
实验1:修改显示为绝对路径;
[root@jinkai01 ~]# PS1='[\u@\h \w]\$'
[root@jinkai01 ~]#cd /etc/sysconfig/
[root@jinkai01 /etc/sysconfig]#
特殊符号
号* 任意个任意字符
号?任意一个字符
号 # 注释字符
\ 脱义字符
| 管道符
$变量前面的标识符,还可以和!结合使用。
!$ 表示上条命令中的最后一个变量,例如ls a.txt,那么当前命令下输入!$则代表a.txt
;多条命令写到一行,用分号分隔
~ 用户家目录
& 放到命令后面,会把命令丢到后台执行,例如:sleep 300 &
;> :输出重定向
;>> :追加重定向
2> :错误输出重定向
2>> :错误追加重定向
&>:正确和错误结果重定向到一个文件
[ ] :方括号表示指定字符中的一个,【0-9】,【a-zA-Z】,【abc】;
||和&& 判断语句,用于命令之间;(|| 或的意思 ls 1.txt || ls 2.txt 如果执行ls 1.txt成功 就不会执行ls 2.txt)
(&& 是and的意思 ls 1.txt && ls 2.txt 表示 如果ls 1.txt 执行成功 才会执行 ls 2.txt)
管道符命令
cut命令:
作用:截取文件部分显示
格式:cut -d ‘分割字符’ [-cf] 数字
-d 后面跟分隔符,分割字符要用单引号括起来
-f指定段数
-c后面接的是第几个字符;
显示passwd文档的前两段,截取:之前的1段;
cat /etc/passwd |head -2 |cut -d ":" -f 1
[root@jinkai01 /etc]#cat /etc/passwd | head -2 | cut -d ':' -f 1
root
Bin
sort命令:
作用:排序显示;
格式:sort [ -t 分隔符 ] [ -kn1,n2 ] [-nru ]
-n:表示使用纯数字排序
-r:表示使用反向排序
-t:后面跟分割字符,作用跟cut 的 -d 选项一样
-kn1/-kn1,n2:表示由n1区间排序到n2区间,可以只写-kn1,即对n1字段排序
如果sort 不加任何选项,则从首字符向后依次按照ASCII码值进行比较,最后将它们按升序输出
实验:将psswd 按ACISS编码排序从a-z顺序;
sort /etc/passwd #仔细看首字符字母顺序
[root@jinkai01 /etc]#sort /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
linuxprobe:x:1000:1000:linuxprobe:/home/linuxprobe:/bin/bash
wc命令
作用:统计文件行数、字符数或词数;
-l: 统计文件行数;
-m:统计字符数(换行符也会计算在内)#cat -A 可以看到文件换行符
-w:统计词 (空白作为分隔)
统计/etc/passwd 有多少行
[root@jinkai01 /etc]#wc -l /etc/passwd
19 /etc/passwd
[root@jinkai01 /etc]#
uniq命令
作用:去重复(去重复内容只限于相邻段),配合sort排序然后再去重复,-c 统计重复的行数,并把行数写在前面;
实验1:不排序去重复;
[root@jinkai01 /etc]#cat a.txt
abc
222
abc
111
111
[root@jinkai01 /etc]#uniq a.txt
abc
222
abc
111
结果:abc没有去重复,因为不相邻
实验2:排序去重复;结合sort使用
[root@jinkai01 /etc]#cat a.txt
abc
222
abc
111
111
[root@jinkai01 /etc]#sort a.txt
111
111
222
abc
abc
[root@jinkai01 /etc]#sort a.txt | uniq
111
222
abc
sort 先给排序,然后把输出结果通过管道符给后面去执行
tee命令
作用:相当于>命令,也就是输出重定向,但是可以显示;
参数-a:追加;
[root@jinkai01 /etc]#cat a.txt | tee 2.txt
abc
222
[root@jinkai01 /etc]#cat a.txt | tee -a 2.txt
abc
222
[root@jinkai01 /etc]#cat 2.txt
abc
222
abc
222
tr命令
作用:替换字符;
-d:表示删除某个字符,后面跟要删除的字符
-s:表示删除重复的字符
实验:把小写字母换成大写字母,如tr ‘[a-z]’ ‘[A-Z]’
[root@jinkai01 /etc]#head -2 /etc/passwd | tr '[a-z]' '[A-Z]'
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
实验:还可以替换字符
[root@jinkai01 /etc]#grep 'root' /etc/passwd | tr 'r' 'R'
Root:x:0:0:Root:/Root:/bin/bash
opeRatoR:x:11:0:opeRatoR:/Root:/sbin/nologin
split命令
作用:切割命令,将一个大的文件分割成多个文件;
-b表示依据大小来分割(默认单位字节),
-l 表示依据行数来分割;
实验1:按大小来分割文件;
[root@jinkai01 /etc]#mkdir aa
[root@jinkai01 /etc]#cp /etc/passwd aa/
[root@jinkai01 /etc]#cd aa
[root@jinkai01 /etc/aa]#split -b 500 passwd
[root@jinkai01 /etc/aa]#ls
passwd xaa xab
可以指定目标文件名
[root@jinkai01 /etc/aa]#rm -f xa*
[root@jinkai01 /etc/aa]#split -b 500 passwd 123
[root@jinkai01 /etc/aa]#ls
123aa 123ab passwd
实验2:按行数来分割文件;
[root@jinkai01 /etc/aa]#split -l 10 passwd
[root@jinkai01 /etc/aa]#ls
passwd xaa xab
[root@jinkai01 /etc/aa]#wc -l *
19 passwd
10 xaa
9 xab
38 tota
linux局部变量特殊字符替换 变量 全局变量 环境变量 特殊符号 管道符命令:cut sort uniq wc tee tr sp...