shell基础知识----变量

这篇博客介绍了Linux Shell中的环境变量,包括env和set命令,以及如何配置系统和用户环境变量。此外,还讲解了Shell中的特殊符号,如通配符、注释、脱义字符、管道符、cut、sort命令等,并探讨了重定向和条件运算符的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

变量

环境变量PASH,就是一个预设的一个变量,通常shell预设的变量都是大写,变量就是使用一个较简单的字符串来代替某些具有特殊意义的设定以及数据。列如:就拿PATH来讲,这个PASH就代替了所有常用命令的绝对路径的设定,有了PASH这个变量,我们运行某个命令时,就不在需要输入全局路径,直接输入命令即可,使用echo命令显示变量的值。

[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# echo $HOME
/root
[root@localhost ~]# echo $PWD
/root
[root@localhost ~]# echo $LOGNAME
/root

一、env命令

env命令,可以列出系统预设的全部系统变量

[root@jing ~]# env
XDG_SESSION_ID=7
HOSTNAME=jing
SELINUX_ROLE_REQUESTED=
TERM=vt100
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.200.1 50490 22
SELINUX_USE_CURRENT_RANGE=
SSH_TTY=/dev/pts/2
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=en_US.UTF-8
SELINUX_LEVEL_REQUESTED=
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
SSH_CONNECTION=192.168.200.1 50490 192.168.200.40 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
_=/usr/bin/env

登录不同的用户,这些环境变量的值也不同。以下显示的是root账户的环境变量。
在这里插入图片描述

二、set命令

set命令,可以输出环境变量

[root@jing ~]# set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="2" [2]="46" [3]="2" [4]="release" [5]="x86_64-redhat-linux-gnu")
BASH_VERSION='4.2.46(2)-release'
COLUMNS=104
DIRSTACK=()
EUID=0
GROUPS=()
HISTCONTROL=ignoredups
HISTFILE=/root/.bash_history
HISTFILESIZE=1000
HISTSIZE=1000
HOME=/root
HOSTNAME=jing
HOSTTYPE=x86_64
IFS=$' \t\n'
LANG=en_US.UTF-8
LESSOPEN='||/usr/bin/lesspipe.sh %s'
LINES=28
LOGNAME=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:'
MACHTYPE=x86_64-redhat-linux-gnu
MAIL=/var/spool/mail/root
MAILCHECK=60
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PIPESTATUS=([0]="0")
PPID=2295
PS1='[\u@\h \W]\$ '
PS2='> '
PS4='+ '
PWD=/root
SELINUX_LEVEL_REQUESTED=
SELINUX_ROLE_REQUESTED=
SELINUX_USE_CURRENT_RANGE=
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
SHLVL=1
SSH_CLIENT='192.168.200.1 50490 22'
SSH_CONNECTION='192.168.200.1 50490 192.168.200.40 22'
SSH_TTY=/dev/pts/2
TERM=vt100
UID=0
USER=root
XDG_RUNTIME_DIR=/run/user/0
XDG_SESSION_ID=7
_=env
colors=/root/.dircolors

set命令不仅可以显示系统预设的变量,也可以显示用户自定义的变量。

[root@jing ~]# myname=jhgz        自定义变量
[root@jing ~]# echo $myname     查看变量
jhgz
[root@jing ~]# set |grep myname    
myname=jhgz

这个变量只能在当前的shell中生效,使用bash命令可以再打开一个shell

[root@jing ~]# echo $myname     查看变量
jhgz
[root@jing ~]# bash        可以再打开一个shell
[root@jing ~]# echo $myname       显示为空

[root@jing ~]# exit      退出
exit
[root@jing ~]# echo $myname     可以查看变量
jhgz

如果想让设置的环境变量一直生效,有两种方法:
1、允许系统内所有用户登录后都能使用该变量,将变量加入到/etc/profile内,然后生效即可。可以查看一下,或使用su -test切换到其他帐户上就可以看到效果。

[root@jing ~]# echo "export myname=jhgz">> /etc/profile
[root@jing ~]# source !$ 
source /etc/profile
[root@jing ~]# bash
[root@jing ~]# echo $myname
jhgz
[root@jing ~]# exit
exit
[root@jing ~]# su -test 
[root@jing ~]# echo $myname
jhgz

2、仅当前用户使用该变量,在用户主目录下的 .bashrc文件的最后一行加上export myname=jhgz,然后运行source, 。bashrc就生效。再登录test,用户验证。
在这里插入图片描述
Linux下设置自定义变量的规则
在这里插入图片描述

[root@jing ~]# myname='jhgz 1'
[root@jing ~]# echo $myname
jhgz 1

需注意:本身有单引号时,就要使用双引号
[root@jing ~]# myname1="jhgz's"
[root@jing ~]# echo $myname1
jhgz's

如果变量内容中有其他命令,运行结果则可以加入反引号
[root@jing ~]# myname2='pwd'
[root@jing ~]# echo $myname2
pwd

变量内容可以累加其他变量的内容,但要加入双引号,如果把双引号打成单引号,那就不是你想要的结果了。
在这里插入图片描述
关于bash命令
在这里插入图片描述

三、系统环境变量和个人环境变量的配置文件

在这里插入图片描述

四、Linux shell中的特殊符号

*1、 代表零个或多个任意字符

[root@jing ~]# ls /tmp/*
[root@jing ~]# ls /tmp/1*

在这里插入图片描述
2、 ?只代表一个任意的字符

[root@jing ~]# touch /tmp/1
[root@jing ~]# ls /tmp/?
/tmp/1
不管是数字还是字母,只要是一个字符都能匹配出来

3、注释符号 #
即# 后面的内容都会被忽略

[root@jing ~]# abc=123  #定义变量
[root@jing ~]# echo $abc
123

*4、脱义字符 *
将后面的特殊字符(如:*)还原为普通字符

[root@jing ~]# mkdir /tmp/k*
[root@jing ~]# mkdir /tmp/k\*
mkdir: cannot create directory ‘/tmp/k*’: File exists
[root@jing ~]# ls /tmp
1   systemd-private-6b2dfb10677447f3821fdda5d734d93e-vgauthd.service-9ymtJp
k*  systemd-private-6b2dfb10677447f3821fdda5d734d93e-vmtoolsd.service-kt3gQQ

5、管道符 |
将前面的命令输出作为后面命令的输入,一般针对文档操作的命令比较常用。列如:cat、less、head、tail、grep、cut、sort、wc、uniq、tr、tee、split、sed、awk等,其中grep、awk和sed是正则表达式必须掌握的工具。

[root@jing ~]# cat /etc/passwd |wc -l
18

6、cut命令
cut命令用来截取某一个字符,其格式为 cut -d ‘分隔符’ [cf] n ,这里 n 表示数字。
在这里插入图片描述

-d 选项后面加冒号作为分隔符,-f 1表示截取第一段,-f 和 1之间的空格可有可无。

[root@localhost ~]# cat /etc/passwd |cut -d ':' -f 1 |head -5
root
bin
daemon
adm
lp

-c 选项后面可以是1个数字 n ,也可以是一个区间n1-n2,也可以是多个数字n1,n2和n3

[root@localhost ~]# head -n2 /etc/passwd |cut -c2
o
i
[root@localhost ~]# head -n2 /etc/passwd |cut -c1-10
root:x:0:0
bin:x:1:1:
[root@localhost ~]# head -n2 /etc/passwd |cut -c1,6,10
rx0
b::

7、sort命令
sort命令用作排序,其格式为 sort -d [ -t ‘分隔符’ ] [-kn1,n2] [-nru] ,这里n1和n2指的是数字。
在这里插入图片描述
sort不加任何选项,则从首字符向后依次按ASCII码值进行比较,最后将它们按升序输出。

[root@localhost ~]# head -n5 /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
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
对比
[root@localhost ~]# head -n5 /etc/passwd |sort
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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
root:x:0:0:root:/root:/bin/bash

在这里插入图片描述

-t后面跟分隔符,-k选项后面跟单个数字表示对第几个区域的字符串排序,-n选项表示使用纯数字排序

[root@localhost ~]# head -n5 /etc/passwd |sort -t: -k3,5 -r       (以冒号为分隔符,对第三区域到第五区域的字符串排序)
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash

8、命令wc
统计文档的行数(-l),字符串(-m),或词数(-w)

[root@localhost ~]# wc -l /etc/passwd
20 /etc/passwd
[root@localhost ~]# wc -m /etc/passwd
887 /etc/passwd
[root@localhost ~]# wc -w /etc/passwd
28 /etc/passwd

9、命令uniq
删除重复的行,只有 -c 一个命令比较常用,使用命令前需要先排序,否则没有。所以一般和排序命令sort 一起使用

[root@localhost ~]# cat 1.txt
gjzh zaishanhelingzhong
jueseyanyi yuyurusheng
zhenshidangshaonianzhe
shaonianqiye
对比
[root@localhost ~]# uniq 1.txt
gjzh zaishanhelingzhong
jueseyanyi yuyurusheng
zhenshidangshaonianzhe
shaonianqiye

[root@localhost ~]# sort 1.txt |uniq
gjzh zaishanhelingzhong
jueseyanyi yuyurusheng
shaonianqiye
zhenshidangshaonianzhe
[root@localhost ~]# sort 1.txt |uniq -c
      1 gjzh zaishanhelingzhong
      1 jueseyanyi yuyurusheng
      1 shaonianqiye
      1 zhenshidangshaonianzhe

10、命令tee
命令后面跟文件名,作用类似于重定向 > ,但比重定向多一个功能,即写入文件时还显示在屏幕上

[root@localhost ~]# echo '888888' |tee 1.txt
888888

11、命令tr
用于替换字符,常用来处理文档中的特殊字符,但只能是单个字符可以使用,字符串不能使用
在这里插入图片描述

把小写字母换成大写字母
[root@localhost ~]# cat 1.txt |tr '[a-z]' '[A-Z]'
JHGZSZMLD
把大写字母换成小写字母
[root@localhost ~]# cat 1.txt |tr '[A-Z]' '[a-z]'  
jhgzszmld
替换字符
[root@localhost ~]# grep 'd' 1.txt |tr 'd' n
jhgzszmln

12、命令split
-b:表示依据大小来分割文档,单位byte

[root@localhost ~]# cp /etc/passwd ./
[root@localhost ~]# split -b 400 passwd
[root@localhost ~]# ls
1.txt  anaconda-ks.cfg  db.sh  disk.sh  passwd  student.txt  test  xaa  xab  xac
[root@localhost ~]# rm -f xa*
[root@localhost ~]# split -b 500 passwd 123
[root@localhost ~]# ls
123aa  123ab  1.txt  anaconda-ks.cfg  db.sh  disk.sh  passwd  student.txt  test

-l:表示依据行数分割文档

[root@localhost ~]# rm -f 123*
[root@localhost ~]# ls
1.txt  anaconda-ks.cfg  db.sh  disk.sh  passwd  student.txt  test
[root@localhost ~]# split -l 10 passwd
[root@localhost ~]# ls
1.txt  anaconda-ks.cfg  db.sh  disk.sh  passwd  student.txt  test  xaa  xab
[root@localhost ~]# wc -l xa*
 10 xaa
 10 xab
 20 total

**13、特殊字符 ∗ ∗ 与 ! 连 用 即 ! ** 与!连用即 ! ! 表示上一条的最后一个变量

[root@localhost ~]# ls 1.txt
1.txt
[root@localhost ~]# ls !$
ls 1.txt
1.txt

14、特殊字符~
这个字符表示家目录,root用户的家目录是/root,普通用户则是/home/username

[root@localhost ~]# cd ~
[root@localhost ~]# pwd
/root
[root@localhost ~]# su jhgz
[root@localhost ~]$ cd ~
[root@localhost ~]$ pwd
/home/jhgz

15、特殊字符&
在这里插入图片描述
16、重定向符号 >, >> , 2> 和 2>>
在这里插入图片描述
17、特殊字符 ;
在一行中输入一个命令,然后回车就可以运行了。如果想在一行中运行两个或两个以上的命令,需要在符号之间加 ; 符号。
18、中括号 [ ]
中括号内为字符组合,代表字符组合中任意一个,也可以是一个范围

[root@localhost ~]# ls -d [1-2].txt
1.txt 2.txt

在这里插入图片描述

19、特殊字符 && 和 ||

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值