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