1. 程式人生 > >3.8 8.6-8.9聽課筆記

3.8 8.6-8.9聽課筆記

環境變量 自定義 fg、bg 子bash 全局變量

管道符和作業控制

[root@localhost ~]# cat a.txt

-bash: lsaaa: 未找到命令

-bash: lsaaa: 未找到命令

[root@localhost ~]# cat a.txt|wc -l

2

[root@localhost ~]# cat a.txt|grep 'aaa'

-bash: lsaaa: 未找到命令

-bash: lsaaa: 未找到命令

*將前面的結果交給後面的命令執行

Ctrl+z 臨時暫停正在執行的進程(調向後臺)

[root@localhost ~]# vim 2.txt

[1]+ 已停止 vim 2.txt

[root@localhost ~]# df -h

文件系統 容量 已用 可用 已用% 掛載點

/dev/sda3 28G 1.4G 27G 5% /

devtmpfs 479M 0 479M 0% /dev

tmpfs 489M 0 489M 0% /dev/shm

tmpfs 489M 6.7M 482M 2% /run

tmpfs 489M 0 489M 0% /sys/fs/cgroup

/dev/sda1 197M 97M 100M 50% /boot

tmpfs 98M 0 98M 0% /run/user/0

[root@localhost ~]# fg 將後臺進程調回前臺

vim 2.txt

[root@localhost ~]# vim aa.txt

[2]+ 已停止 vim aa.txt

[root@localhost ~]# fg

vim aa.txt

[2]+ 已停止 vim aa.txt

[root@localhost ~]# jobs 將已經停止的後臺任務列出

[1]- 已停止 vim 2.txt

[2]+ 已停止 vim aa.txt

[root@localhost ~]# fg 2 多進程在後臺時調回一個進程(fg+id號)

vim aa.txt

[root@localhost ~]jobs

[1]- 已停止 vim 2.txt

[2]+ 已停止 vim aa.txt

[3] 運行中 vmstat 1 &

[root@localhost ~]fg 3

[root@localhost ~]vmstat 1 該進程會不停的在屏幕上輸出信息,按ctrl+z進程停止,敲bg進程會在後臺運行起來

[root@localhost ~]# jobs

[3]- 已停止 vmstat 1

[4]+ 已停止 vim aa

[root@localhost ~]# bg 4

[4]+ vim aa &

[root@localhost ~]# jobs

[3]- 已停止 vmstat 1

[4]+ 已停止 vim aa

*有的命令在後臺只能是停止狀態(vim),有些命令按ctrl+z會被放在後臺並停止,但使用bg+id可以使這種命令在後臺運行起來(vmstat 1

[root@localhost ~]# sleep 1000 在這1000秒內什麽也不做

Ctrl+z停止進程,暫停這種狀態

[root@localhost ~]#

[root@localhost ~]# sleep 200

^Z

[6]+ 已停止 sleep 200

[root@localhost ~]# jobs

[3] 已停止 vmstat 1

[4] 已停止 vim aa

[5]- 已停止 sleep 1000

[6]+ 已停止 sleep 200

[root@localhost ~]# fg

sleep 200

fg後不加任何內容則將最新被停止的進程拉到前臺執行

[root@localhost ~]# bg 6

[6]+ sleep 200 &

[root@localhost ~]# jobs

[3] 已停止 vmstat 1

[4]- 已停止 vim aa

[5]+ 已停止 sleep 1000

[6] 運行中 sleep 200 &

被執行了bg的停止進程會在後臺重新運行起來

[root@localhost ~]# sleep 100 &

[7] 1112

[6] 完成 sleep 200

[root@localhost ~]# jobs

[3] 已停止 vmstat 1

[4]- 已停止 vim aa

[5]+ 已停止 sleep 1000

[7] 運行中 sleep 100 &

[root@localhost ~]#

將一條命令直接丟到後臺執行

*Jobs命令只能發現目前終端下的被放在後臺的進程

[root@localhost ~]# ps aux |grep sleep

root 1109 0.0 0.0 107904 612 pts/0 T 21:32 0:00 sleep 1000

root 1115 0.0 0.0 112676 984 pts/0 S+ 21:43 0:00 grep --color=auto sleep

[7] 完成 sleep 100

Shell變量

查看變量

[root@localhost ~]# env 查看系統常用的環境變量

XDG_SESSION_ID=4

HOSTNAME=localhost.localdomain

SELINUX_ROLE_REQUESTED=

TERM=xterm

SHELL=/bin/bash

HISTSIZE=2000

[root@localhost ~]# set 查看系統內置環境變量和用戶自定義變量

[root@localhost ~]# a=111 自定義變量

[root@localhost ~]# set |grep '111' 111為條件在set的結果下查找

PPID=1118

a=111

[root@localhost ~]# env |grep 'a=111' env無法搜索自定義變量

[root@localhost ~]#

[root@localhost ~]# env |grep HOSTNAME

HOSTNAME=localhost.localdomain

系統變量通常不能修改(可以通過配置文件更改),自定義變量是用戶自己定義的變量;

變量名可以是字母、數字、下劃線,變量名不能以數字開頭;

變量值有特殊符號時需要用單引號括起來

[root@localhost ~]# a1=2

[root@localhost ~]# echo $a1

2

[root@localhost ~]# _a1=3

[root@localhost ~]# echo $_a1

3

[root@localhost ~]# 1a1=4

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

[root@localhost ~]# g=a b c

-bash: b: 未找到命令

[root@localhost ~]# g='a b c'

[root@localhost ~]# h="a$bc"

[root@localhost ~]# echo $h

a

[root@localhost ~]# h='a$bc' ‘’中無論任何特殊符號都會原樣輸出

[root@localhost ~]# echo $h

a$bc

單引號:

可以說是所見即所得:即將單引號內的內容原樣輸出,或者描述為單引號裏面看見的是什麽就會輸出什麽。

雙引號:

  把雙引號內的內容輸出出來;如果內容中有命令,變量等,會先把變量,命令解析出結果,然後在輸出最終內容來。

  雙引號內命令或變量的寫法為`命令或變量`$(命令或變量)。

無引號:

把內容輸出出來,可能不會講含有空格的字符串視為一個整體輸出,如果內容中有命令,變量等,會先把變量,命令解析結果,然後在輸出最終內容來,如果字符串中帶有空格等特殊字符,則不能完整的輸出,需要改加雙引號,一般連續的字符串,數字,路徑等可以用,不過最好用雙引號替代之

[root@localhost ~]# c="a$b"c “”中的變量、命令會先被執行再輸出

[root@localhost ~]# echo $c

a3c

[root@localhost ~]#

全局變量

[root@localhost ~]# w 查看當前系統用戶登錄情況

22:36:39 up 2:07, 3 users, load average: 0.00, 0.01, 0.02

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

root tty1 20:30 2:06m 0.02s 0.02s -bash

root pts/0 192.168.91.1 20:30 40:55 1.45s 0.14s -bash

root pts/1 192.168.91.1 21:45 7.00s 0.09s 0.02s w

[root@localhost ~]# echo $SSH_TTY 通過環境變量查看自己在哪個tty

/dev/pts/1

[root@localhost ~]# echo $SSH_TTY

/dev/pts/1

[root@localhost ~]# hyc=linux

[root@localhost ~]# echo $hyc

linux

[root@localhost ~]# echo $SSH_TTY

/dev/pts/0

[root@localhost ~]# echo $hyc

在一個tty下定義的變量在另一個tty下不生效

[root@localhost ~]# pstree

技術分享圖片

*重新打開一個bash(子shell)執行pstree命令

[root@localhost ~]# echo $hyc 打開的兩個子shell並沒有繼承自定義變量hyc

[root@localhost ~]# exit

exit

[root@localhost ~]# echo $hyc

[root@localhost ~]# exit

exit

[root@localhost ~]# echo $hyc 退出到最初的shell

linux

之前自定義的變量只在本地生效

定義全局變量

[root@localhost ~]# export aming=linux

[root@localhost ~]# echo $aming

linux

[root@localhost ~]# bash

[root@localhost ~]# echo $aming

Linux

全局變量向下生效,該shell下配置的全局變量只在該shell的子shell及以下的shell中生效;

不同sshd的全局變量互不影響;

[root@localhost ~]# unset aming 取消自定義的變量

[root@localhost ~]# export yy=aa

[root@localhost ~]# echo $yy

aa

[root@localhost ~]# bash

[root@localhost ~]# echo $yy

aa

[root@localhost ~]# unset yy

[root@localhost ~]# echo $yy

shell可以刪除從上級shell獲得的全局變量

環境變量配置文件

系統層次配置文件

/etc/profile /etc/bashrc

用戶層次

~/.bashrc ~/.bash_history ~/.bash_logout ~/.bash_profile

Profile是用戶登錄才生效;

bashrc在系統執行shell時就生效,此時用戶可以不用登錄

如果需要變量全局生效則在/etc下編輯對應文件,如果只針對某個用戶生效則在用戶家目錄下編輯對應文件

~/.bash_logout 定義用戶每次登出時執行的操作

變量PS1

[root@localhost ~]PS1影響

[root@localhost ~/d6z/hyc]#echo $PS1

[\u@\h \w]\$

[root@localhost ~/d6z/hyc]#PS1='[\u@\h \W]\$'

[root@localhost hyc]#

W小寫代表絕對路徑,大寫代表相對路徑

[root@localhost hyc]#PS1='<\u@\h \W>\$' []可代替為其他任意符號或消除

<root@localhost hyc>#

設置使括號內容帶顏色

技術分享圖片

變量PS2

例如進入mysql會進入一個小終端,此時一行開頭顯示的內容會用到變量PS2

root@localhost ~]#echo $PS2

>

root@localhost ~]#for i in `seq 1 100` 進入PS2

>

> done

-bash: 未預期的符號 `done' 附近有語法錯誤

root@localhost ~]#PS2="#"

root@localhost ~]#for i in `seq 1 100`

#


3.8 8.6-8.9聽課筆記