shell读取文件到变量、管道重定向、if和while嵌套使用、命令替换
文章目錄
- 管道介紹
- 腳本:讀取文件,在while中使用if判斷
- 位置參數(shù)
- 命令替換
- 退出狀態(tài)
- 測(cè)試條件
- test測(cè)試數(shù)值:
- 測(cè)試字符串
管道介紹
管道是Linux編程中最常用的技術(shù)之一,管道符“|”
管道技術(shù)是Linux一種基本的進(jìn)程間通信技術(shù),它利用先進(jìn)先出(First In First Out,FIFO)排隊(duì)模型來指揮進(jìn)程間的通信。對(duì)于管道,我們可以形象地把它們當(dāng)作是連接兩個(gè)實(shí)體的一個(gè)單向連接器。 Linux管道可用于應(yīng)用程序之間、Linux命令之間,以及應(yīng)用程序和Linux命令之間的通信,Shell編程主要是利用管道進(jìn)行Linux命令之間的通信
command1 | command2 |…|commandn
command1到commandn表示Linux的n個(gè)命令,這n個(gè)命令利用管道進(jìn)行通信。command1執(zhí)行完后,如果沒有管道,command1的輸出結(jié)果將直接顯示在Shell上,當(dāng)Shell遇到管道符“|”后,就將command1的輸出發(fā)送給command2,作為command2的輸入。
ls -l | grep vi列出該路徑下目錄的文件列表,并在其中查找與vi匹配的內(nèi)容
在上面的基礎(chǔ)上再對(duì)查找出來的行進(jìn)行計(jì)數(shù)
ls -l | more
用more命令顯示文件顯然便于用戶閱讀,尤其是對(duì)那些一頁(yè)不夠顯示的結(jié)果。利用管道功能可以方便地將多頁(yè)的結(jié)果進(jìn)行分頁(yè)顯示,比如,/etc目錄下有很多文件,列出這些文件時(shí),需要多頁(yè)顯示,我們可以將ls的結(jié)果通過管道傳給more命令,more命令將多頁(yè)結(jié)果進(jìn)行分頁(yè)顯示,便于用戶查看
注意:
● 管道“|”其實(shí)也是I/O重定向的一個(gè)操作部分。
● 管道左邊是一個(gè)可以送到標(biāo)準(zhǔn)輸出(stdout)的命令,右邊是一個(gè)從標(biāo)準(zhǔn)輸入接收(stdin)的命令;如果I/O重定向符左邊是有輸出的命令,右邊只能是文件,如果I/O重定向符左邊是能接收輸入的命令,右邊只能是文件。
● 在管道執(zhí)行的時(shí)候啟動(dòng)了兩個(gè)進(jìn)程,該進(jìn)程分別執(zhí)行左右兩邊的命令;而I/O重定向符值則在同一個(gè)進(jìn)程中完成。
腳本:讀取文件,在while中使用if判斷
while : do python3 signyy.py | tee "log.txt"var=$(cat log.txt)if [[ $var == "yes" ]];thenbreakfi done echo "value=$var"注意if后面要有空格
位置參數(shù)
位置參數(shù)(Positional Parameters)是一種特殊的Shell變量,用于從命令行向Shell腳本傳遞參數(shù),$1表示第1個(gè)參數(shù),$2表示第2個(gè)參數(shù)等,0為腳本的名字,從0為腳本的名字,從0為腳本的名字,從{10}開始,參數(shù)號(hào)需要用花括號(hào)括起來,如10、{10}、10、{11}、100等。{100}等。100等。*和$@一樣,表示從$1開始的全部參數(shù)。 下面舉例說明位置參數(shù)的用法:
腳本:
#!/bin/bash echo "the parameter: $1" echo "the parameter number: $#"命令行輸入 ./test.sh a
輸出
“the parameter: a”
“the parameter number: 1”
$#是位置參數(shù)的個(gè)數(shù) $$是執(zhí)行該腳本所啟動(dòng)的進(jìn)程號(hào)
命令替換
命令替換是指將命令的標(biāo)準(zhǔn)輸出作為值賦給某個(gè)變量,bash Shell定義了兩種語(yǔ)法進(jìn)行命令替換,一種是使用反引號(hào),另一種是利用$(),兩種等價(jià)的語(yǔ)法格式如下:
`linux命令` $(linux命令)echo `who`root@iZuf64cvuzy0uruzobicmgZ:/PyTorch-YOLOv31# echo
`date`
Fri Sep 17 09:07:24 CST 2021
當(dāng)命令替換返回有多行結(jié)果時(shí),如果不引用命令替換的結(jié)果,換行符也將被刪除,
命令替換刪除換行符:
dir = `ls -l a*` #命令替換 echo $dir #不引用dir變量,換行符被刪除 echo "$dir" #引用dir變量,換行符保留命令替換使bash Shell可以與其他編程語(yǔ)言編寫的程序結(jié)合起來,運(yùn)行如C/C++、Java語(yǔ)言編寫的程序同樣輸出到stdout上,我們只要使用命令替換將輸出保存到Shell變量,Shell就可以對(duì)其他編程語(yǔ)言編寫的程序所產(chǎn)生的輸出進(jìn)行任何處理。
例子:example.c
#include<stdio.h> main(){ printf("hello") }然后在目錄下執(zhí)行:
gcc -o example example.c #編譯源文件,生成可執(zhí)行文件 testc = `./example` #將結(jié)果賦給testc變量 echo $testc #輸出hello退出狀態(tài)
在Linux系統(tǒng)中,每當(dāng)命令執(zhí)行完成后,系統(tǒng)都會(huì)返回一個(gè)退出狀態(tài)。該退出狀態(tài)用一整數(shù)值表示,用于判斷命令運(yùn)行正確與否。若退出狀態(tài)值為0,表示命令運(yùn)行成功;若退出狀態(tài)值不為0,則表示命令運(yùn)行失敗。最后一次執(zhí)行命令的退出狀態(tài)值被保存在內(nèi)置變量“$?”中,所以可以通過echo語(yǔ)句測(cè)試命令是否運(yùn)行成功。POSIX規(guī)定了幾種退出狀態(tài)和退出狀態(tài)的含義
測(cè)試條件
測(cè)試命令是判斷語(yǔ)句和循環(huán)語(yǔ)句中條件測(cè)試的工具,所以該命令對(duì)編寫Shell腳本是非常重要的。
測(cè)試命令可用于測(cè)試表達(dá)式的條件的真假。如果測(cè)試的條件為真,則返回一個(gè) 0值;如果測(cè)試的條件為假,將返回一個(gè)非 0整數(shù)值。這一點(diǎn)和C語(yǔ)言的條件判斷語(yǔ)句是有區(qū)別的,在C語(yǔ)言中,條件為真時(shí)返回的是一個(gè)非0正整數(shù)值,條件為假時(shí)返回一個(gè)0值,所以,若以前學(xué)習(xí)過C語(yǔ)言,要注意其區(qū)別,以免混淆。
格式:
test expression 或者 [ expression ] 空格一定不能少
test測(cè)試數(shù)值:
[ "$a" -eq "$b" ] echo $? #退出狀態(tài)為1,說明a b變量不相等測(cè)試字符串
注意僅有一種格式 test string
總結(jié)
以上是生活随笔為你收集整理的shell读取文件到变量、管道重定向、if和while嵌套使用、命令替换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java nio非阻塞式网络通信入门案例
- 下一篇: HttpServletRequest和@