【面向就業的Linux基礎】從入門到熟練,探索Linux的秘密(七)-shell語法(5)

shell語法的一些知識和練習,可以當作筆記收藏一下!!

文章目錄

前言

一、shell

二、shell語法

1.文件重定向

?2.引入外部腳本

?3.作業

總結


前言

shell語法的一些知識和練習,可以當作筆記收藏一下!!


提示:以下是本篇文章正文內容,下面案例可供參考

一、shell

hell是我們通過命令行與操作系統溝通的語言。

shell腳本可以直接在命令行中執行,也可以將一套邏輯組織成一個文件,方便復用。
AC Terminal中的命令行可以看成是一個“shell腳本在逐行執行”。

Linux中常見的shell腳本有很多種,常見的有:

Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
zsh

Linux系統中一般默認使用bash,所以接下來講解bash中的語法。
文件開頭需要寫#! /bin/bash,指明bash為腳本解釋器。

二、shell語法

1.文件重定向

每個進程默認打開3個文件描述符:

  • stdin標準輸入,從命令行讀取數據,文件描述符為0
  • stdout標準輸出,向命令行輸出數據,文件描述符為1
  • stderr標準錯誤輸出,向命令行輸出數據,文件描述符為2

可以用文件重定向將這三個文件重定向到其他文件中。

重定向命令列表

命令?? ?說明
command > file將stdout重定向到file中
command < file將stdin重定向到file中
command >> file將stdout以追加方式重定向到file中
command n> file將文件描述符n重定向到file中
command n>> file將文件描述符n以追加方式重定向到file中

輸入和輸出重定向:

echo "World" >> output.txt  # 將字符串追加到output.txt中read str < output.txt  # 從output.txt中讀取字符串echo $str  # 輸出結果:Hello World

同時重定向stdin和stdout
創建bash腳本:?

#! /bin/bashread a
read becho $(expr "$a" + "$b")

創建input.txt,里面的內容為:

3
4
acs@9e0ebfcd82d7:~$ chmod +x test.sh  # 添加可執行權限
acs@9e0ebfcd82d7:~$ ./test.sh < input.txt > output.txt  # 從input.txt中讀取內容,將輸出寫入output.txt中
acs@9e0ebfcd82d7:~$ cat output.txt  # 查看output.txt中的內容
7

?2.引入外部腳本

類似于C/C++中的include操作,bash也可以引入其他文件中的代碼。

語法格式:

. filename  # 注意點和文件名之間有一個空格或source filename

示例
創建test1.sh,內容為:

#! /bin/bashname=yxc  # 定義變量name

?然后創建test2.sh,內容為:

#! /bin/bashsource test1.sh # 或 . test1.shecho My name is: $name  # 可以使用test1.sh中的變量

執行命令:

acs@9e0ebfcd82d7:~$ chmod +x test2.sh 
acs@9e0ebfcd82d7:~$ ./test2.sh 
My name is: yxc

?3.作業

創建好作業后,先進入文件夾/home/acs/homework/lesson_3/,然后:
(0) 進入homework_0文件夾,編寫自動完成lesson_1作業的腳本helper.sh。要求:
? ? [1] 當前目錄下僅包含helper.sh


? ? [2] helper.sh具有可執行權限
?


(1) 進入homework_1文件夾,編寫腳本check_file.sh。要求:
? ? [1] 當前目錄下僅包含check_file.sh。


? ? [2] check_file.sh具有可執行權限。


? ? [3] check_file.sh接收一個傳入參數。格式為 ./check_file.sh file
? ? [4] 判斷傳遞參數,分別在標準輸出中輸出如下內容(不包括雙引號):
? ? ? ? 1) 如果傳入參數個數不是1,則輸出一行:"arguments not valid",然后退出,退出狀態等于1。
? ? ? ? 2) 如果file文件不存在,則輸出一行:"not exist",然后退出,退出狀態等于2。
? ? ? ? 3) 如果file文件存在,則輸出分別進行如下5個判斷,然后退出,退出狀態等于0。
? ? ? ? ? ? 1] 如果file為普通文件,則輸出一行:"regular file"
? ? ? ? ? ? 2] 如果file為目錄(文件夾),則輸出一行:"directory"
? ? ? ? ? ? 3] 如果file具有可讀權限,則輸出一行:"readable"
? ? ? ? ? ? 4] 如果file具有可寫權限,則輸出一行:"writable"
? ? ? ? ? ? 5] 如果file具有可執行權限,則輸出一行:"executable"


(2) 進入homework_2文件夾,編寫腳本main.sh。要求:
? ? [1] 當前目錄下僅包含main.sh
? ? [2] main.sh具有可執行權限
? ? [3] 該文件從stdin(標準輸入)中讀取一個整數n
? ? [4] 在stdout(標準輸出)輸出斐波那契數列的第n項。即:a[0] = 1, a[1] = 1, a[i] = a[i - 1] + a[i - 2], 求a[n]。
? ? [5] 數據保證 0 <= n <= 20,腳本不需要判斷n的合法性。

(3) 進入homework_3文件夾,編寫腳本main.sh。要求:
? ? [1] 當前目錄下僅包含main.sh
? ? [2] main.sh具有可執行權限
? ? [3] 該文件從stdin(標準輸入)中讀取兩行整數n和m
? ? [4] 在stdout(標準輸出)中輸出1~n的按字典序從小到大的順序數第m個全排列,輸出一行,用空格隔開所有數,行末可以有多余空格。
? ? [5] 數據保證 1 <= n <= 10, 1 <= m <= min(100, n!),腳本不需要判斷數據的合法性。

?

?

#! /bin/bashread n
read m#:<<EOF
for (( i = 1; i <= n; i ++ ))
dost[$i]=0p[$i]=0
donedfs(){if [ $1 -eq $n ]thenm=$(expr $m - 1)if [ $m -eq 0 ]thenfor (( i = 0; i < n; i ++ ))doecho -e "${p[$i]} \c"doneecho ''return 0fireturn 1filocal j=0for (( j = 1; j <= n; j ++ ))doif [ ${st[$j]} -eq 0 ]thenp[$1]=$jst[$j]=1#x=$(expr $1 + 1)if dfs $(expr $1 + 1)thenreturn 0fist[$j]=0fidonereturn 1
}
dfs 0
#EOF

(4) 進入homework_4文件夾,編寫腳本main.sh。要求:
? ? [1] 當前目錄下僅包含main.sh
? ? [2] main.sh具有可執行權限
? ? [3] main.sh接收兩個傳入參數。格式為 ./main.sh input_file output_file
? ? [4] 從input_file中讀取一個正整數n,然后將前n個正整數的平方和寫入output_file中
? ? [5] 數據保證 1 <= n <= 100,腳本不需要判斷所有數據的合法性。

#! /bin/bash:<<EOF
input_file=$1
output_file=$2
EOF#read n < $input_file
read n < $1
sum=0for (( i = 1; i <= n; i ++ ))
dosqr=$(expr $i \* $i)sum=$(expr $sum + $sqr)
done#echo $sum > $output_file
echo $sum > $2


總結

上述是shell語法的一些知識和練習,可以當作筆記收藏一下!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/39731.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/39731.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/39731.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

七種大模型微調方法:讓你的Offer拿到爽

在當今的人工智能和機器學習領域&#xff0c;大型預訓練模型&#xff08;如GPT、BERT等&#xff09;已成為解決自然語言處理&#xff08;NLP&#xff09;任務的強大工具。然而&#xff0c;要讓這些模型更好地適應特定任務或領域&#xff0c;往往需要進行微調。本文將詳細介紹七…

手把手教你:如何在51建模網免費下載3D模型?

作為國內領先的3D互動展示平臺&#xff0c;51建模網不僅匯聚了龐大的3D模型資源庫&#xff0c;供用戶免費下載&#xff0c;更集成了在線編輯、格式轉換、內嵌展示及互動體驗等一站式功能&#xff0c;為3D創作者及愛好者搭建起夢想與現實的橋梁。 如何在51建模網免費下載3D模型…

鴻蒙認證值得考嗎?

鴻蒙認證值得考嗎&#xff1f; 鴻蒙認證&#xff08;HarmonyOS Certification&#xff09;是華為為了培養和認證開發者在鴻蒙操作系統&#xff08;HarmonyOS&#xff09;領域的專業技能而設立的一系列認證項目。這些認證旨在幫助開發者和企業工程師提升在鴻蒙生態中的專業技能…

linux——IPC 進程間通信

IPC 進程間通信 interprocess communicate IPC&#xff08;Inter-Process Communication&#xff09;&#xff0c;即進程間通信&#xff0c;其產生的原因主要可以歸納為以下幾點&#xff1a; 進程空間的獨立性 資源隔離&#xff1a;在現代操作系統中&#xff0c;每個進程都…

圖解 Kafka 架構

寫在前面 Kafka 是一個可橫向擴展&#xff0c;高可靠的實時消息中間件&#xff0c;常用于服務解耦、流量削峰。 好像是 LinkedIn 團隊開發的&#xff0c;后面捐贈給apache基金會了。 kafka 總體架構圖 Producer&#xff1a;生產者&#xff0c;消息的產生者&#xff0c;是消息的…

【高考志愿】測繪科學與技術

目錄 一、專業介紹 1.1 專業概述 1.2 專業方向 1.3 課程內容 二、就業前景 三、報考注意事項 四、測繪科學與技術專業排名 五、職業規劃與未來發展 高考志愿選擇測繪科學與技術專業&#xff0c;對于許多有志于空間信息技術領域發展的學生來說&#xff0c;無疑是一個極具…

怎么把錄音轉文字?推薦幾個簡單易操作的方法

在小暑這個節氣里&#xff0c;炎熱的天氣讓人分外渴望效率up&#xff01;Up&#xff01;Up&#xff01; 對于那些在會議或課堂中急需記錄信息的朋友們&#xff0c;手寫筆記的速度往往難以跟上講話的節奏。此時&#xff0c;電腦錄音轉文字軟件就像一陣及時雨&#xff0c;讓記錄…

PHP pwn 學習 (1)

文章目錄 A. PHP extensions for C1. 運行環境與工作目錄初始化2. 構建與加載3. 關鍵結構定義PHP_FUNCTIONINTERNAL_FUNCTION_PARAMETERSzend_execute_data等ZEND_PARSE_PARAMETERS_START等zend_parse_arg_stringzend_module_entryzend_function_entry等PHP類相關 原文鏈接&…

Python 作業題1 (猜數字)

題目 你要根據線索猜出一個三位數。游戲會根據你的猜測給出以下提示之一&#xff1a;如果你猜對一位數字但數字位置不對&#xff0c;則會提示“Pico”&#xff1b;如果你同時猜對了一位數字及其位置&#xff0c;則會提示“Fermi”&#xff1b;如果你猜測的數字及其位置都不對&…

Flower花所:穩定運營的數字貨幣交易所

Flower花所是一家穩定運營的數字貨幣交易所&#xff0c;致力于為全球用戶提供安全、高效的數字資產交易服務。作為一家長期穩定運營的數字貨幣交易平臺&#xff0c;Flower花所以其可靠的技術基礎和優質的客戶服務而聞名。 平臺穩定性與可靠性&#xff1a; 持續運營&#xff1a;…

Vue前端練習

此練習項目只涉及前端&#xff0c;主要是vue和ElementUI框架的使用。&#xff08;ElementUI官網&#xff1a;Element - The worlds most popular Vue UI framework&#xff09; 一、環境準備 安裝idea 安裝Node.js 一鍵式安裝(不需要做任何配置) npm -v&#xff08;也可用nod…

mysql-sql-第十五周

學習目標&#xff1a; sql 學習內容&#xff1a; 41.查詢沒有學全所有課程的同學的信息 select *from students where students.stunm not in (select score.stunm from score group by score.stunm having count(score.counm) (select count(counm) from course)) 42.查詢…

數據結構_線性表

線性表的定義和特點 線性表是具有相同特性的數據元素的一個有限序列 :線性起點/起始節點 :的直接前驅 :的直接后繼 :線性終點/終端節點 n:元素總個數,表長 下標:是元素的序號,表示元素在表中的位置 n0時稱為空表 線性表 由n(n>0)個數據元素(結點),組成的有限序列 將…

安卓模擬器如何修改ip地址

最近很多老鐵玩游戲的&#xff0c;想多開模擬器一個窗口一個IP&#xff0c;若模擬器窗口開多了&#xff0c;IP一樣會受到限制&#xff0c;那么怎么更換自己電腦手機模擬器IP地址呢&#xff0c;今天就教大家一個修改模擬器IP地址的方法&#xff01;廢話不多說&#xff0c;直接上…

Matlab 中 fftshift 與 ifftshift

文章目錄 【 1. fftshift、ifftshift 的區別】【 2. fftshift(fft(A)) 作圖 】【 3. fftshift(fft(A)) 還原到 A 】Matlab 直接對信號進行 FFT 的結果中,前半部分是正頻,后半部分是負頻,為了更直觀的表示,需要將 負頻 部分移到 前面。【 1. fftshift、ifftshift 的區別】 M…

alibaba EasyExcel 簡單導出數據到Excel

導入依賴 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>4.0.1</version> </dependency> 1、alibaba.excel.EasyExcel導出工具類 import com.alibaba.excel.EasyExcel; import …

探索哈希函數:數據完整性的守護者

引言 銀行在處理數以百萬計的交易時&#xff0c;如何確保每一筆交易都沒有出錯&#xff1f;快遞公司如何跟蹤成千上萬的包裹&#xff0c;確保每個包裹在運輸過程中沒有丟失或被替換&#xff1f;醫院和診所為龐大的患者提供有效的醫療保健服務&#xff0c;如何確保每個患者的醫療…

假陽性和假陰性、真陽性和真陰性

在深度學習的分類問題中&#xff0c;真陽性、真陰性、假陽性和假陰性是評估模型性能的重要指標。它們的定義和計算如下&#xff1a; 真陽性&#xff08;True Positive, TP&#xff09;&#xff1a; 定義&#xff1a;模型預測為正類&#xff08;陽性&#xff09;&#xff0c;且實…

電梯修理升級,安裝【電梯節能】能量回饋設備

電梯修理升級&#xff0c;安裝【電梯節能】能量回饋設備 1、節能率評估 15%—45% 2、降低機房環境溫度&#xff0c;改善電梯控制系統的運行環境&#xff1b; 3、延長電梯使用壽命&#xff1b; 4、機房可以不需要使用空調等散熱設備的耗電&#xff0c;間接節省電能。 歡迎私詢哦…

智能數字人系統的主要功能

智能數字人系統或虛擬數字人系統&#xff0c;是指利用人工智能技術構建的虛擬人物形象&#xff0c;能夠與人進行自然交互的系統。數字人系統的主要功能包括以下幾個方面。北京木奇移動技術有限公司&#xff0c;專業的軟件外包開發公司&#xff0c;歡迎交流合作。 1. 語言理解與…