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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

shell读取文件到变量、管道重定向、if和while嵌套使用、命令替换

發(fā)布時(shí)間:2024/9/30 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shell读取文件到变量、管道重定向、if和while嵌套使用、命令替换 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 管道介紹
  • 腳本:讀取文件,在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)容

ls -l | grep vi | wc -l

在上面的基礎(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)的含義

touch exit_file #創(chuàng)建文件 ls echo $? #輸出0 表示創(chuàng)建成功

測(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)容,希望文章能夠幫你解決所遇到的問題。

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