基礎的shell編程問題(一)

文章目錄

  • 題目一
    • 題目描述
    • 代碼實現
      • 關于$#的有關內容
    • 實測
    • 本程序的作用
  • 題目二
    • 題目描述
    • 代碼實現
    • 注釋
    • 關于argc、argv
    • 關于read函數
      • 關于文件描述符
    • 關于write函數
    • 本程序的作用
  • 題目三
    • 題目描述
    • 代碼實現
    • 實測
    • 關于grep命令
    • 關于read命令
  • 題目四
    • 題目描述
    • 代碼實現
    • 關于test命令
    • 實測


題目一

題目描述

請給下面的shell程序加注釋,并說明程序的運行結果。


代碼實現

#!/bin/bash
#bash script programming
if test $# == 0 # 參數個數為0(沒有給出參數)
thenls -l|grep '^d'   # 尋找并顯示當前目錄中以d開頭的字符串,即目錄文件
else  # 參數個數不為0(給出了參數)for idols -l $i|grep '^d'  # 尋找并顯示給出的目錄中以d開頭的字符串,即目錄文件done
fi

關于$#的有關內容

$# 表示命令行上參數的個數,但不包括shell腳本名本身
詳情請參考:shell預先定義的特殊變量


實測

當給出參數 / 時
在這里插入圖片描述
當給出參數 home 時
在這里插入圖片描述
當給出參數 . 時(. 即為當前目錄)
在這里插入圖片描述
當不給出參數時
在這里插入圖片描述


本程序的作用

我們會發現不給參數時執行結果與給出參數 . 時執行結果一致,也就是說本程序的作用是:

沒有給出參數時,尋找并顯示當前目錄中以d開頭的字符串,即目錄文件
給出參數時,尋找并顯示給出的目錄中以d開頭的字符串,即目錄文件


題目二

題目描述

分析程序的功能以及運行結果,在代碼后添加注釋。


代碼實現

在這里插入圖片描述


注釋

參數小于2輸出“you forgot the enter a filename”

退出并報錯

以只讀方式打開參數1,其權限為0644,并將返回值賦值給fd1

創建一個文件在參數2,其權限為0644,并將返回值賦值給fd2

從fd1中讀取字節數為512的內容到buf緩沖區,并將返回值賦值給n

將buf中字節數為n的內容寫到fd2中,直到n不大于0

關閉fd1,fd2


關于argc、argv

argc表示參數數量,argv則是保存參數的數組,argv[0] 指向程序運行的全路徑名,argv[1]是第一個參數,argv[2]是第二個參數,以此類推……


關于read函數

在這里插入圖片描述
在這里插入圖片描述


關于文件描述符

很多函數都會用到這個東西,這個東西其實就跟我們的學號一樣,是為了方便引用某文件而存在的,其類型一般為int,比如一個文件叫test,碰巧還有一個文件叫test,于是我們在引用他們時如果“叫”他們的名字往往容易兩個一起“回應”你,所以我們將他們分別描述為01、02,那么在需要引用他們的時候就方便多了。


關于write函數

在這里插入圖片描述
在這里插入圖片描述


本程序的作用

將fd1中的內容全部復制到fd2中


題目三

題目描述

編寫一個shell腳本,檢查給定的用戶是否登陸系統。


代碼實現

read -p "請輸入用戶名:" user
if who|grep -qw $user
thenecho $user login
elseecho $user not login
fi

實測

在這里插入圖片描述
在這里插入圖片描述


關于grep命令

本題中用到了grep命令的參數:-q,-w

grep -w :只匹配整個單詞,而不是包含一部分單詞的字符串

(如grep -w cmy 目標文件 ,只會匹配‘cmy’,而不匹配‘cmypangle’這種包含cmy的字符串)

grep -q : Quiet; do not write anything to standard output. Exit immediately with zero status if any match is found, even if an error was detected.
中文意思為,安靜模式,不打印任何標準輸出。如果有匹配的內容則立即返回狀態值0。

不帶-q是這樣的:

在這里插入圖片描述
不帶-w是這樣的
在這里插入圖片描述


關于read命令

本題中用到了read命令的參數: -p

read -p :用于給出提示符,p是prompt的縮寫,即由這個開關項給出提示信息。

例如,本題中,回車后屏幕會顯示:

請輸入用戶名:

該語句之后輸入的內容就會被保存到use變量中了


題目四

題目描述

編寫一個shell腳本,判斷文件是不是字符設備文件,如果是,將其拷貝到 /dev 目錄下。


代碼實現

if [[ -c $1 ]]
thencp $1 /dev
elseecho "This file is not a character device file!"
fi

關于test命令

為了方便就直接用老師的PPT截圖了

在這里插入圖片描述
在這里插入圖片描述
至于cp命令……emm就是很常規的用法,這里就不說了~


實測

在這里插入圖片描述
字符設備咱也不知道咋搞,就不搞復制的情況了~

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

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

相關文章

百戰c++(9)

12 . 下面的代碼輸出是什么&#xff0c;為什么&#xff1f; void foo(void) { unsigned int a 6; int b -20; (ab > 6) puts("> 6") : puts("< 6"); } 這個問題測試你是否懂得C語言中的整數自動轉換原則&#xff0c;我發現有些開發者懂得…

基礎的shell編程問題(二)

文章目錄題目一題目描述代碼實現結果驗證關于本題題目二題目描述代碼實現結果測試題目三題目描述代碼實現及結果測試題目四題目描述代碼實現及結果測試題目五題目描述代碼實現及結果測試題目一 題目描述 輸入的命令行參數必須是hello&#xff0c;才會正確顯示&#xff1b;否則…

百戰c++(10)

1.多態類中的虛函數表是Compile-Time&#xff0c;還是Run-Time時建立的? 2.將一個 1M -10M 的文件&#xff0c;逆序存儲到另一個文件&#xff0c;就是前一個文件的最后一個 字符存到新文件的第一個字符&#xff0c;以此類推。 3.main主函數執行完畢后&#xff0c;是否可能會…

Numpy實現酒鬼漫步問題【以及randint()、where()、cumsum()、argmax()的用法詳解】

文章目錄題目描述代碼實現關于本題涉及到的幾個函數randint()where()cumsum()題目拓展題目描述代碼實現題目拓展題目描述代碼實現argmax()題目描述 從前有一個酒鬼&#xff0c;喝醉了行走在一條直線上&#xff0c;每走一步方向是不確定的&#xff08;向前或者向后&#xff09;…

百戰c++(11)

31.找錯 Void test1() { char string[10]; char* str1"0123456789"; strcpy(string, str1); } Void test2() { char string[10], str1[10]; for(I0; I<10;I) { str1[i] a; } strcpy(string, str1); } Void test3(char* str1) { char string[10]; if(st…

搞清axis的含義,這一篇就夠了!

文章目錄axis的含義旁門左道式理解二維數組中的axis三維數組中的axis正規理解axis的含義 在自己分析之前先擺上官方關于多維數組中axis的值的定義&#xff1a; axis 0&#xff0c;表示第一個維度 axis 1&#xff0c;表示第二個維度 axis -1&#xff0c;表示最后一個維度…

百戰c++(12)

36. 定義 int **a[3][4], 則變量占有的內存空間為&#xff1a;_____ 37. 編寫一個函數&#xff0c;要求輸入年月日時分秒&#xff0c;輸出該年月日時分秒的下一秒。如輸入2004年12月31日23時59分59秒&#xff0c;則輸出2005年1月1日0時0分0秒。 38.寫一個函數&#xff0c;判…

Struts2.3.5+Hibernate3+Spring3.1基于注解實現的多文件上傳,下載

Struts2.3.5Hibernate3Spring3.1基于注解實現的的多文件上傳&#xff0c;下載,這里是上傳文件到數據庫中&#xff0c;上傳控件可以增加和刪除&#xff0c;有需要的朋友可以看看。 以下是源碼下載地址&#xff1a;http://www.zuidaima.com/share/1639672872438784.htm jar包的下…

Pandas索引操作及高級索引——reindex()方法

文章目錄索引對象多個數據結構之間共享index類對象is與的區別重置索引——reindex()索引操作Series的索引操作切片不連續索引布爾型索引DataFrame的索引操作獲取不連續的Series對象切片Pandas庫中的操作索引方法索引對象 Index類對象&#xff0c;該對象不可以進行修改&#xf…

【精品計劃1】動態規劃入門到熟悉,看不懂來打我啊

持續更新。。。。。。 2.1斐波那契系列問題 2.2矩陣系列問題 2.3跳躍系列問題 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些變形選講 2.1斐波那契系列問題 在數學上&#xff0c;斐波納契數列以如下被以遞歸的方法定義&#xff1a;F(0)0&#xff0c;F(1)1, F(n)F(n-1)…

Pandas數據排序——【按索引排序sort_index()方法、按值排序sort_value()方法】

文章目錄按索引排序——sort_index()對Series排序對DataFrame排序按值排序——sort_value()對Series進行排序對DataFrame進行排序按索引排序——sort_index() sort_index(axis0, levelNone, ascendingTrue, inplaceFalse, kind‘quicksort’, na_position‘last’,sort_remaini…

【大總結2】大學兩年,寫了這篇幾十萬字的干貨總結

本文是我大學兩年知識的總結。涵蓋數據結構、算法、語言基礎、操作系統、關系數據庫、NOSQL、網絡/前端/項目基礎知識、安全和測試、框架的學習、中間件和工具、設計模式和框架原理、我推薦的資料、我的建議 本篇文章應該算是Java后端開發技術棧的&#xff0c;但是大部分是基礎…

Pandas對象的層次化索引——【from_tuples()、from_arrays()、from_product()、swaplevel()、sort_index()、sort_values()】

文章目錄層次化索引的概念層次化索引的創建使用嵌套列表的方式構造層次化索引對象Series對象DataFrame對象通過MultiIndex類的方法構建層次化索引通過from_tuples()方法創建MultiIndex對象通過from_arrays()方法創建MultiIndex對象通過from_product()方法創建MultiIndex對象層次…

《這是全網最硬核redis總結,誰贊成,誰反對?》六萬字大合集

我攤牌了&#xff0c;這篇文章&#xff0c;值得99%的人收藏 此文后續會改為粉絲可見&#xff0c;所以喜歡的請提前關注和收藏&#xff0c;不迷路。 最近有五本我喜歡的redis實體新書&#xff0c;想要的去評論&#xff0c;我寫個隨機數抽獎包郵送給你。 那么&#xff0c;準備好…

Python數據預處理之異常值的處理——【自定義的three_sigma()函數、boxplot()方法】

文章目錄基于3σ原則檢測異常值代碼實現測試基于箱型圖檢測異常值異常值的處理基于3σ原則檢測異常值 3σ原則&#xff0c;又稱拉依達準則。是指假設一組檢測數據只含有隨機誤差。對其進行計算處理得到標準偏差&#xff0c;按一定概率確定一個區間&#xff0c;凡是超過這個區間…

那個谷歌的網紅扔雞蛋的題,來看看教科書式的回答

leetcode頂級難題&#xff0c;谷歌面試天天問&#xff0c;來看看吧&#xff0c;帶你來一步一步達到最優解。 谷歌不知道問了多少遍&#xff0c;藍橋杯也出現過&#xff0c;leetcode上是頂級難題&#xff0c;到底是什么題能如此頻繁地出現&#xff1f;我們一探究竟吧。 原題描述…

Python更改數據類型——astype()方法和to_numeric()函數

文章目錄明確指定數據的類型通過dtypes屬性進行查看創建Pandas對象指定數據類型轉換數據類型通過astype()方法強制轉換數據的類型通過to_numeric()函數轉換數據類型明確指定數據的類型 通過dtypes屬性進行查看 import pandas as pddf pd.DataFrame({A: [1, 2, 4],B: [9, -80…

不騙你,沒讀這一篇,你不可能懂二分

上篇文章講動態規劃獲得了80k瀏覽&#xff0c;這次的二分也值得你們一看&#xff0c;這個系列是特別用心寫的&#xff0c;準備出書的哦 動態規劃 3.0 引子 圖書館自習的時候,一女生背著一堆書進閱覽室,結果警報響了,大媽讓女生看是哪本書把警報弄響了&#xff0c;女生把書倒出…

Python之數據合并——【concat()函數、merge()函數、join()方法、combine_first()方法】

文章目錄軸向堆疊數據——concat()函數橫向堆疊與外連接縱向堆疊與內連接主鍵合并數據——merge()函數內連接方式外連接方式左連接方式右連接方式其他根據行索引合并數據——join()方法四種連接方式行索引與列索引重疊合并重疊數據——combine_first()方法軸向堆疊數據——conc…

超硬核!操作系統學霸筆記,考試復習面試全靠它

之后會發布基于基礎知識的大部分算法的模擬代碼合集&#xff0c;敬請關注。 進程基礎 進程的基本概念 程序順序執行的特征&#xff1a; 1&#xff09;順序性&#xff1a;處理機嚴格按照程序所規定的順序執行&#xff0c;每一步操作必須在下一步操作開始前執行 2&#xff09;封…