日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

shell变量,管道符,作业控制,shell变量,以及变量配置文件

發(fā)布時(shí)間:2025/3/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shell变量,管道符,作业控制,shell变量,以及变量配置文件 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

管道符
|:管道符是將前面的文件的輸出的內(nèi)容傳遞給后面的命令
[root@localhost ~]# ls |wc -l
21
查看當(dāng)前目錄下有多少文件
[root@localhost ~]# cat 1.txt |wc -l
1
查看1.txt的行數(shù)
以上的兩個(gè)例子就是管道符的簡(jiǎn)單用法。

管道符常營(yíng)命令

cut:截取字符串,比如我們要以“:”作為分隔符,取第一列,

[root@localhost ~]# cat /etc/passwd |head -5|cut -d ":" -f1

root

bin

daemon

adm

lp

這里-d是指定分割符,-f后面接數(shù)字,是指截取范圍,上面的例子是截取第一段,就輸入-f1,如果想

截取兩段,就用“,”分開(kāi),后面再接一個(gè)數(shù)字。如f1,2。

如果是1-3段,后面就接1-3.

指定第幾個(gè)字符 -c

[root@localhost ~]# cat /etc/passwd |head -2|cut -c4

t

:

sort:排序,比如我們現(xiàn)在得到一列數(shù)字,或者是一列字符串,我們要由小到大做一個(gè)排序
[root@localhost ~]# sort /etc/passwd |head -1
adm:x:3:4:adm:/var/adm:/sbin/nologin
我們可以看到,sotr的排序是遵循英文字母的排序。這就是sort的作用。

sort -n會(huì)以數(shù)字大小去排序
[root@localhost ~]# sort -n 1.txt
<

{
}
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
22223333
22222222222aaaaaaa
*我們需要注意的是,如果我們輸入-n,那么文件里面的特殊符號(hào)和字符會(huì)被認(rèn)為是0。所以特殊符號(hào)和字母會(huì)排在前面。

sotr-r反向排序,與-n正好相反
[root@localhost ~]# sort -r 1.txt
sync:x:5:0:sync:/sbin:/bin/sync
1111111111133333333333
}

wc -l 統(tǒng)計(jì)行數(shù)
[root@localhost ~]# cat 1.txt | wc -l
20

wc -m 統(tǒng)計(jì)字符數(shù)
[root@localhost ~]# cat 1.txt | wc -m
499

wc -w 統(tǒng)計(jì)詞數(shù),他是根據(jù)空格或者空白字符去分割的
[root@localhost ~]# cat 1.txt | wc -w
20

uniq去重復(fù),他一般和sort在一起用,先排序,然后去重(最常用)
[root@localhost ~]# cat 2.txt
123
abc 1111,222
123
abc
1
1
2
然后我們排序,去重
[root@localhost ~]# sort 2.txt |uniq
1
123
2
abc
abc 1111,222

uniq -c統(tǒng)計(jì)重復(fù)次數(shù)
[root@localhost ~]# sort 2.txt |uniq -c
2 1
2 123
1 2
1 abc
1 abc 1111,222
tee:類(lèi)似于>輸出重定向。>輸出重定向僅僅是將內(nèi)容寫(xiě)入到目標(biāo)文件,對(duì)我們看不到任何的內(nèi)容,成功與否。這時(shí)候我們就使用tee取代">"。它不僅可以將內(nèi)容重定向到目標(biāo)文件,也可以將內(nèi)容打印到屏幕上。
[root@localhost ~]# sort 2.txt |uniq -c|tee a.txt
2 1
2 123
1 2
1 abc
1 abc 1111,222
這樣我們就可以看到輸出的內(nèi)容了

tee -a追加,和>> 作用類(lèi)似。但是在追加的同時(shí)將內(nèi)容打印在屏幕上
[root@localhost ~]# sort 2.txt |uniq -c|tee -a a.txt
2 1
2 123
1 2
1 abc
1 abc 1111,222
[root@localhost ~]# cat a.txt
2 1
2 123
1 2
1 abc
1 abc 1111,222
2 1
2 123
1 2
1 abc

tr:替換字符,它支持寫(xiě)多個(gè)字符
[root@localhost ~]# echo "aminglinux" |tr '[al]' '[AL]'
AmingLinux
[root@localhost ~]# echo "aminglinux" |tr 'a' 'A'
Aminglinux
全部替換成大寫(xiě)
[root@localhost ~]# echo "aminglinux" |tr '[a-z]' '[A-Z]'
AMINGLINUX

split:切割,將大文件切割成小文件。他有兩種用法,一種是 -b大小默認(rèn)單位是字節(jié) ,一種是 -l行數(shù)。(系統(tǒng)默認(rèn)是以x開(kāi)頭)
[root@localhost test]# split -b 1000 a.txt
[root@localhost test]# ls
a.txt xae xaj xao xat xay xbd xbi xbn xbs xbx xcc xch xcm xcr xcw xdb xdg xdl xdq xdv xea xef xek xep xeu xez xfe xfj
xaa xaf xak xap xau xaz xbe xbj xbo xbt xby xcd xci xcn xcs xcx xdc xdh xdm xdr xdw xeb xeg xel xeq xev xfa xff xfk
xab xag xal xaq xav xba xbf xbk xbp xbu xbz xce xcj xco xct xcy xdd xdi xdn xds xdx xec xeh xem xer xew xfb xfg xfl
xac xah xam xar xaw xbb xbg xbl xbq xbv xca xcf xck xcp xcu xcz xde xdj xdo xdt xdy xed xei xen xes xex xfc xfh xfm
xad xai xan xas xax xbc xbh xbm xbr xbw xcb xcg xcl xcq xcv xda xdf xdk xdp xdu xdz xee xej xeo xet xey xfd xfi
這就將a.txt按1000b切割完成了。

我們也可以切割完后給他命名,不用系統(tǒng)給我們的名字,但是我們只能自定義它的前綴。

s[root@localhost test]# split -b 100k a.txt abc

[root@localhost test]# ls
abcaa abcab a.txt xaa xab

split -l按行切割,比如我們都按照1000行切割
[root@localhost test]# split -l 1000 a.txt
[root@localhost test]# wc -l *
1000 xaa
1000 xab
1000 xac
這樣每個(gè)文件都是1000行。

后面接目標(biāo)文件,就可以直接清空里面的內(nèi)容。
[root@localhost ~]# > a.txt
[root@localhost ~]# cat a.txt

注釋符
#:在#號(hào)后面輸入的shell都不回生效,它的作用是解釋說(shuō)明。

$:變量前綴,!$組合,這則里面表示行位

;多條命名寫(xiě)到一行,用分號(hào)分割
[root@localhost ~]# ls 1.txt; wc -l 2.txt
1.txt
7 2.txt

~:用戶(hù)的家目錄,在正則表達(dá)式里表示匹配符

&:命令放到后臺(tái)去

:輸出重定向,會(huì)把目標(biāo)的內(nèi)容全部替換

:追加重定向,會(huì)將內(nèi)容追加到目標(biāo)內(nèi)容的結(jié)尾處
2>:錯(cuò)誤輸出重定向,和輸出重定向作用一樣
2>>:最佳錯(cuò)誤重定向,和追加重定向作用一樣。
&>:直接把正確和錯(cuò)誤直接輸入到目標(biāo)文件中

【】:指定字符中的一個(gè),經(jīng)常用于替換,比如【0-9】,【a-zA-Z】,【abc】。

||:在shell代表或者,它用在兩條命令中間。如果第一條命令執(zhí)行成功,它就不會(huì)執(zhí)行第二條命令,如果執(zhí)行不成功,它就會(huì)執(zhí)行第二條命令。
[root@localhost ~]# ls 1a.txt|| wc -l 2.txt
ls: 無(wú)法訪(fǎng)問(wèn)1a.txt: 沒(méi)有那個(gè)文件或目錄
7 2.txt
第一條命令沒(méi)有成功,它就執(zhí)行了第二條
[root@localhost ~]# ls 1.txt|| wc -l 2.txt
1.txt
第一條命令成功了,它就不執(zhí)行第二條。

&&:讓兩個(gè)命令連續(xù)執(zhí)行,只有前面命令執(zhí)行成功,后面命令才繼續(xù)執(zhí)行。
[root@localhost ~]# ls 1.txt&& wc -l 2.txt
1.txt
7 2.txt
只有前一個(gè)命令執(zhí)行成功,后一個(gè)才會(huì)執(zhí)行
[root@localhost ~]# ls 1a.txt&& wc -l 2.txt
ls: 無(wú)法訪(fǎng)問(wèn)1a.txt: 沒(méi)有那個(gè)文件或目錄
如果前一個(gè)命令不成功,那么后一條命名就不會(huì)執(zhí)行。

我們可以將||和&&理解成一個(gè)判斷,||只有前面的命令不成功的時(shí)候才執(zhí)行后面的命令,&&只有前面命令成功的時(shí)候才會(huì)執(zhí)行后面的命令。

作業(yè)控制
當(dāng)我們?cè)诰庉嬕粋€(gè)文件,突然間我們要暫停一下去做其他事,這時(shí)我么只要按Ctrl+z將現(xiàn)有的工作扔到后臺(tái)去,然后我們?cè)僮鑫覀冃枰氖虑?br />[root@localhost ~]# vim 1.txt
然后按Ctrl+z
[1]+ 已停止 vim 1.txt
這樣編輯1.txt的工作就放到后臺(tái)了。
如果我們還要繼續(xù)編輯1.txt,就輸入fg,這樣就把放在后臺(tái)的任務(wù)重新放回前面了

如果我們同時(shí)扔到后臺(tái)兩個(gè)命令,這時(shí)我們可以用jobs將后臺(tái)的任任務(wù)打印出來(lái)
[root@localhost ~]# jobs
[1]- 已停止 vim 1.txt
[2]+ 已停止 vim 2.txt
然后我們想要調(diào)回其中一個(gè)任務(wù),只要輸入命令fg+任務(wù)ID號(hào)就可以,比如我們想調(diào)回2.txt的編輯任務(wù),就要輸入fg 2就可以了。

我們也可以將命令放到后臺(tái)去運(yùn)行。輸入命令bg 2
[root@localhost ~]# bg 2
[2]+ vim 2.txt &(這相當(dāng)于后臺(tái)運(yùn)行)
再比如
[root@localhost ~]# sleep 100
^Z
[2]+ 已停止 sleep 100
[root@localhost ~]# bg 2
[2]+ sleep 100 &
[root@localhost ~]# jobs
[1]+ 已停止 sleep 180
[2]- 運(yùn)行中 sleep 100 &

除此之外,我們還可以將命令一次性的放到后臺(tái)去,就是在命令后面加上“&”
[root@localhost ~]# sleep 100 &
[1] 1223
[root@localhost ~]# jobs
[1]+ 運(yùn)行中 sleep 100 &
這樣的話(huà)后可以將一條命令放到后臺(tái)去進(jìn)行,但是在另一個(gè)終端我們是看不到我們本終端的任務(wù)的,但是能查看進(jìn)程。

變量
centos系統(tǒng)內(nèi)變量包括PATH,HOME,PWD,LOGNAME等等,那么這些變量是在哪里規(guī)定的呢?我們可以通過(guò)命令env來(lái)獲取這些系統(tǒng)變量。
env是查看系統(tǒng)常用的環(huán)境變量的,除了env,還有set,這個(gè)命令不僅可以查看系統(tǒng)內(nèi)的環(huán)境變量,也可以查看用戶(hù)自定義的環(huán)境改變量。

[root@localhost ~]# env | head -5
XDG_SESSION_ID=1
HOSTNAME=localhost.localdomain
SELINUX_ROLE_REQUESTED=
TERM=linux
SHELL=/bin/bash
等號(hào)的左邊是變量的名字,右邊是值。系統(tǒng)的變量通常都是大寫(xiě)的英文字母,但是變量的值就不一定是字母了,有時(shí)會(huì)是字母,有時(shí)會(huì)是數(shù)字。

我們也可以自定義變量,比如
[root@localhost ~]# a=111
[root@localhost ~]# echo $a
111
這是我們自定義的變量,而不是我們系統(tǒng)自帶的變量,這個(gè)變量就可以用set命令查到
[root@localhost ~]# set | grep 111
a=111

變量名的規(guī)則:首先系統(tǒng)的環(huán)境變量是系統(tǒng)內(nèi)置的,我們沒(méi)有權(quán)利干涉他,但我們可以修改配置文件。我們也可以自定義變量,首先我們先給變量定一個(gè)名字,變量的名字是由字母、數(shù)字、下劃線(xiàn)組成,但首位不能是數(shù)字。
[root@localhost ~]# a1=2
[root@localhost ~]# echo $a1
2
[root@localhost ~]# a=4
[root@localhost ~]# echo $a
4
[root@localhost ~]# _a1=5
[root@localhost ~]# echo $_a1
5
[root@localhost ~]# 1a=5
-bash: 1a=5: 未找到命令
由此可以看出,變量的首位除了數(shù)字,都可以執(zhí)行。

變量的值有特殊符號(hào)時(shí)需要用單引號(hào)括起來(lái),比如我們要執(zhí)行變量a=a b c
[root@localhost ~]# a=a b c
-bash: b: 未找到命令
由于后邊的值中有空格的存在,所以變量沒(méi)喲形成,他只會(huì)認(rèn)為a=a,而后邊的b,c他會(huì)理解為是一個(gè)命令,會(huì)報(bào)錯(cuò)。所以我們要用‘’括起來(lái),這里建議用單引號(hào),這樣可以脫意
[root@localhost ~]# a='a b c'
[root@localhost ~]# echo $a
a b c
如果用雙引號(hào)“”的話(huà)會(huì)出現(xiàn)特殊符號(hào)不識(shí)別的情況
[root@localhost ~]# a="a$bc"
[root@localhost ~]# echo $a
a
所以,有特殊符號(hào)的時(shí)候要用單引號(hào)‘’
[root@localhost ~]# a='a$bc'
[root@localhost ~]# echo $a
a$bc

變量的累加
我們的變量是可以累加輸出的,比如
[root@localhost ~]# a=1
[root@localhost ~]# b=2
[root@localhost ~]# echo $a$b
12
這樣就可以將兩個(gè)變量同時(shí)輸出

[root@localhost ~]# a='a$bc'
[root@localhost ~]# echo $a
a$bc
加單引號(hào)脫意

[root@localhost ~]# c="a$b"c
[root@localhost ~]# echo $c
a2c
這里面直接把$b看成了一個(gè)賦值的變量,因?yàn)榍懊嬉呀?jīng)是b=2,c=a所以這里的輸出就是a2c。如果我們的變量比較復(fù)雜,那么我們最好用單引號(hào)。

全局變量
我們先做一個(gè)實(shí)驗(yàn),先定義aming=linux
[root@localhost ~]# aming=linux
[root@localhost ~]# echo $aming
linux
然后我們打開(kāi)另一個(gè)回話(huà)或者進(jìn)入另一個(gè)bash
[root@localhost ~]# bash
[root@localhost ~]# echo $aming

[root@localhost ~]#
這時(shí)我們發(fā)現(xiàn)剛才定義的aming并沒(méi)有得出自定義結(jié)果的值的,我們把這樣的定義變量叫做非全局變量,也可以叫做本地變量,他只在當(dāng)前終端下生效。

那我們?cè)鯓訉⑺兂梢粋€(gè)全局變量呢?用命令export
[root@localhost ~]# export aming=linux
[root@localhost ~]# echo $aming
linux
[root@localhost ~]# bash
[root@localhost ~]# echo $aming
linux
這樣就變成了全局變量。而且這種全局變量只能是從上向下,而不能從下向上,也不能在另一個(gè)終端上生效。

取消變量unset
[root@localhost ~]# unset aming
[root@localhost ~]# echo $aming
這樣就取消了自定義變量。

export的語(yǔ)法:export 變量名=變量值,全局變量也只在子shell下生效,輸入bash就進(jìn)入一個(gè)bash。

環(huán)境變量的配置文件
環(huán)境變量文件分為兩個(gè)維度,一個(gè)維度是系統(tǒng)層次(etc下的),另一個(gè)維度是用戶(hù)層次(家目錄下的 ~/.)。系統(tǒng)層次有/etc/porfile,/etc/bashrc,這兩個(gè)文件我們最好不要去編輯它。
用戶(hù)層次包括~/.bashrc,~/.bash_profile。我們可以編輯用戶(hù)家目錄下的這兩個(gè)文件。~/.bash_profile會(huì)調(diào)用~/.bashrc,而~/.bashrc會(huì)調(diào)用~/.bashrc。
profile和bashrc這兩種文件的區(qū)別在于,profile是在用戶(hù)登錄的時(shí)候它就會(huì)自動(dòng)的加載Profile,而profile會(huì)自定的調(diào)用bashrc。而bashrc是執(zhí)行shell腳本的時(shí)候,用戶(hù)不用登陸就可以執(zhí)行腳本,而執(zhí)行腳本就要調(diào)用bashrc里面的一些配置。
~/.bash_history。
~/.bash_logout用來(lái)定義用戶(hù)退出的時(shí)候需要做的一些操作

轉(zhuǎn)載于:https://blog.51cto.com/13067688/2083991

總結(jié)

以上是生活随笔為你收集整理的shell变量,管道符,作业控制,shell变量,以及变量配置文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。