24.管道符和做業控制 shell變量 環境變量配置文件

8.6 管道符和做業控制linux

8.7/8.8 shell變量shell

8.9 環境變量配置文件bash

 

8.6 管道符和做業控制:ssh

~cat 1.txt |wc -l ; cat 1.txt |grep 'aaa'.net

管道符前面的命令輸出的結果給後面的命令進程

 

~ctrl z 暫停一個任務字符串

好比在編輯一個文件,想要查看磁盤空間,能夠ctrl z暫停。fg能夠把暫停的這個任務在調回來get

可暫停多個任務it

~jobs查看後臺的任務ast

jobs能夠把ctrl z的任務調出來,調出全部後臺的任務

~bg[id]把任務調到後臺

能夠把一個正在執行的任務,搞到後臺。

多個任務可後面加序號

不加序號就是執行最後一個

~fg[id]把任務調到前臺

jobs可查看多個已中止的任務,fg 後面加序號,可回到這個序號的任務

不加序號,執行最後一個

~命令後面加&直接丟到後臺

~兩個終端是沒法使用jobs查看的,但能夠查看進程

 

---------------------------------------------------------------------------------------------------------------------------------------

 

8.7/8.8 shell變量:

 

~1.PATH,HOME,PWD,LOGNAME

~2.env命令

~3.set命令多了不少變量,而且包括用戶自定義的變量

~4.自定義變量a=111

~5.變量名規則:字母、數字下劃線,首位不能爲數字

能夠寫a=1 或者a_1=1 又或者_a=1,可是不能寫1=1

~6.變量值有特殊符號是須要用單引號括起來

例如空格,a=‘1 2 3’

~7.變量的累加,(重點,實例有介紹單引號、雙引號的用法)

可累計查看 echo $a$b

雙引號、單引號

~8.全局變量export b=2 (詳細看實例)

bash生成一個子shell

exit返回上一個shell

在一個終端下設置的變量設置的,在另外一個下看不到的叫非全局變量或本地變量

全局變量只往下生效,子文件-子子文件這樣生效。往上不生效,子文件不會影響父文件

也就是說,創建了1文件和2文件,1能使用2的變量,但2不能使用1的變量

運行子shell,直接運行bash

~9.unset變量

unset後面跟變量的名字,可取消名字

 

變量的名字一般是大寫的英文字母

變量的值不必定是大寫的

env可查看變量

set也可查看變量,也包括用戶的變量,set通常是shell腳本

 

4.

咱們能夠自定義用戶的變量,就是PATH

[root@localhost ~]# echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

[root@localhost ~]# a=111

[root@localhost ~]# echo $a

111

[root@localhost ~]# set |grep '111'

_=111

a=111

固然不是系統內核的。他只在set裏找到,也就是用戶自定義的變量

 

5.

[root@localhost ~]# a=1

[root@localhost ~]# echo $a

1

[root@localhost ~]# a_1=1

[root@localhost ~]# echo $a_1

1

[root@localhost ~]# _a=1

[root@localhost ~]# echo $_a

1

[root@localhost ~]# 1=1

-bash: 1=1: 未找到命令

[root@localhost ~]# 2=a

-bash: 2=a: 未找到命令

 

6.

[root@localhost ~]# a=1 2 3

-bash: 2: 未找到命令

[root@localhost ~]# a='1 2 3'

[root@localhost ~]# echo $a

1 2 3

 

7.

[root@localhost ~]# a=1

[root@localhost ~]# b=2

[root@localhost ~]# echo $a$b 簡單的能夠直接寫

12

[root@localhost ~]# a='a$bc' a=複雜的 用單引號括起來

[root@localhost ~]# echo $a$b 再次$a$b

a$bc2 a就表明了上邊用單引號括起來的字符

[root@localhost ~]# c=a"$b"c 若是想要讓c=$b的值,就要用雙引號括起來

[root@localhost ~]# echo $c 因此他所表達出來的值,就是$b結果的值,而不是表明$b這個字符

a2c

 

8.

按 w 能夠看到有幾個登陸的

[root@localhost ~]# w

15:26:00 up 8 min, 2 users, load average: 0.01, 0.12, 0.12

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

root pts/0 192.168.159.1 15:19 0.00s 0.13s 0.04s w

root pts/1 192.168.159.1 15:25 23.00s 0.05s 0.05s -bash

登陸的 各分配了 分別從這個IP

都是root TTY 登過來

 

兩個終端咱們分別看一下,各自的TTY

[root@localhost ~]# echo $SSH_TTY

/dev/pts/0 分別對應以上的TTY

[root@localhost ~]# echo $SSH_TTY

/dev/pts/1 分別對應以上的TTY

 

咱們在終端1上設置axin=linux這個變量,在終端2上是沒有的

[root@localhost ~]# axin=linux

[root@localhost ~]# echo $axin

linux 終端1上定義,有這個變量

[root@localhost ~]# echo $axin

終端2上就沒有

[root@localhost ~]#

 

shell自己是一個進程。咱們輸入 bash,至關於進入另外一個終端。再w一下

[root@localhost ~]# bash

[root@localhost ~]# w 發現仍然在pts/0

15:38:11 up 20 min, 2 users, load average: 0.00, 0.01, 0.05

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

root pts/0 192.168.159.1 15:19 3.00s 0.17s 0.02s w

root pts/1 192.168.159.1 15:25 3:47 0.05s 0.05s -bash

pstree一下,咱們linux上沒有pstree這個命令,安裝了psmisc

[root@localhost ~]# pstree

systemd─┬─NetworkManager───2*[{NetworkManager}]

├─VGAuthService

├─agetty

├─auditd───{auditd}

├─chronyd

├─crond

├─dbus-daemon───{dbus-daemon}

├─firewalld───{firewalld}

├─irqbalance

├─master─┬─pickup

│ └─qmgr

├─polkitd───5*[{polkitd}]

├─rsyslogd───2*[{rsyslogd}]

├─sshd─┬─sshd───bash───bash───pstree 咱們如今這這個位置,前面的bash是咱們剛打開的新 的bash,在他的基礎上運行這個命令叫pstree

│ └─sshd───bash

├─systemd-journal

├─systemd-logind

├─systemd-udevd

├─tuned───4*[{tuned}]

└─vmtoolsd───{vmtoolsd}

咱們再運行echo $axin,發現也沒有生效咱們以前設置的axin=linux

[root@localhost ~]# echo $axin

 

[root@localhost ~]#

咱們exit,退出剛纔那個bash

[root@localhost ~]# exit

exit

[root@localhost ~]# echo $axin 發現有有了剛纔設置的axin=linux

linux

像這樣的叫爲非全局變量,或者本地變量(load),僅僅在這個終端下生效

那怎麼變成全局的呢:

[root@localhost ~]# export axin=linux 使用export

[root@localhost ~]# echo $axin

linux

[root@localhost ~]# bash 咱們再bash一個

[root@localhost ~]# echo $axin 就有了

linux

這個就叫作全局變量,也就是說在一開始的那個bash咱們設置了axin=linux,那麼他的子bash或者子子bash都生效。

可是在另外一個終端下不會生效,例如,咱們再打開另外一個終端,pstree

[root@localhost ~]# pstree

systemd─┬─NetworkManager───2*[{NetworkManager}]

├─VGAuthService

├─agetty

├─auditd───{auditd}

├─chronyd

├─crond

├─dbus-daemon───{dbus-daemon}

├─firewalld───{firewalld}

├─irqbalance

├─master─┬─pickup

│ └─qmgr

├─polkitd───5*[{polkitd}]

├─rsyslogd───2*[{rsyslogd}]

├─sshd─┬─sshd───bash───bash───bash

│ └─sshd───bash───pstree 咱們在這,他跟上面的是並列關係,因此不會生效

├─systemd-journal

├─systemd-logind

├─systemd-udevd

├─tuned───4*[{tuned}]

└─vmtoolsd───{vmtoolsd}

演練了這麼多,咱們得出一個結論。

因此,所謂的全局變量,是向下的。在這個shell的基礎上生成子shell,子子shell等等,這樣的話是生效的。不會向上的全局的!!

 

---------------------------------------------------------------------------------------------------------------------------------------

 

8.9 環境變量配置文件:

 

系統層次(這兩個文件不要動):

~ /etc/profile 用戶環境變量,交互,登陸才執行

咱們登陸纔會執行。他會調用bashrc

~ /etc/bashrc 用戶不用登陸,執行shell就生效

咱們執行shell就能夠生效。bashrc是執行shell腳本的時候,用戶不用登陸,就能夠執行shell腳本,只要執行shell,他就會調用bashrc裏面的一些配置

用戶層次:

~ ~/.bashrc

~ ~/.bash_profile

~ ~/.bash_history

~ ~/bash_logout

用戶退出的時候,須要作的一些操做

例如,讓一個用戶每次退出的時候都要刪除他的命令歷史。就能夠把這個配置文件放到logout裏面

~ ps1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$'

ps1表示 [root@axinlinux-01 ~]# 。echo $ps1能夠查看這些配置文件,都是能夠改的。但日常不會 去動

後面的這些字符串是設置 [root@axinlinux-01 ~]# 的顏色

ps2表示 進入另外一個終端,例如MYSQL的時候所顯示的。但僅僅是一個>

相關文章
相關標籤/搜索