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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

系统编程第三次上机

發布時間:2023/12/20 windows 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 系统编程第三次上机 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先把題目和百度到的參考資料粘過來吧orz

弱智答案等ddl過了再粘上來

一是怕錯誤的答案誤導大家,二是怕查重QAQ

實驗目的

掌握shell中管道、重定向的用法?學習shell基本語法

進階內容

注:本部分內容不作為實驗必須要求,只是作為對有興趣深入學習的同學的一些指導。

正則表達式

akw的深入學習http://www.zsythink.net/archives/tag/awk/

sed與grep

實驗環境

bash!!!!

實驗指導

1.?查看當前shell種類

在shell中輸入?echo?$shell,?輸出應當是bash。

?

如果不是,可以使用which sh ,該命令將顯示sh命令的完整路徑,?然后將通過創建軟鏈接使得sh指向bash。(強?行復習軟鏈接)

2.?重定向

Linux中默認輸入輸出分為3類:

標準輸入stdin。標準輸入文件的編號是0(牢記linux萬物皆文件),默認的設備是鍵盤,命令執行時從鍵盤讀?取數據。

標準輸出stdout。標號為1,默認的設備是顯示器,命令的輸出會被打印到屏幕上。

標準錯誤stderr。標號為2,默認的設備是顯示器,命令執行產生的錯誤信息會被發送到標準錯誤文?件。

重定向的意思就是改變這三個文件實際指向,比如我們希望從某個文件中獲取輸入,那么就需要將標準輸入指向這?個文件。 重定向后命令依然從標準輸入獲得輸入,此時標準輸入指向這個文件,故命令能夠從這個文件獲取輸?入。

輸入重定向:

命令?<?文件名?,?比如?sort?<?sp.txt?,?把sp.txt文件中的內容作為sort的輸入。

輸出重定向:

命令?>?文件名?,?比如?cat?/etc/passswd?>?ps.log?,?cat會輸出/etc/passwd中內容,但此時并不會輸出到屏?幕上,而是輸出到ps.log中。

> ?會覆蓋原文件中內容, ?>>?則會將輸出追加到原文件末尾。

錯誤重定向:

命令?2>?文件名?,比如?gcc?-c?test.c?-o?test.out?2?>?error.log,?如果gcc編譯時出現錯誤,則會把錯誤信息輸?出到error.log中。

> ?會覆蓋原文件中內容, ?>>?則會將輸出追加到原文件末尾。

其他

在重定向錯誤時使用了錯誤文件的編號2 ???其實在輸入輸出的時候也可以顯式寫0或1,通常是省略。

&運算符,表示等同于,?2>&1,表示將標準錯誤從重定向到標準輸出指向的文件。如?1>/dev/null?,然?后執行2>&1,此時都指向空設備。

3. ?管道

管道作用是將多個命令串連起來,使一個命令的輸出作為另一個命令的輸入。?命令1?|?命令2?|?命令3?....|?命令n

ls?/etc?|?grep?init?將會輸出/etc目錄下,文件名包含init的文件/目錄。 如果不使用管道,命令就得拆成: ls

/etc >?tmp grep init <?tmp rm?tmp ls?/etc?|?grep?init?>>?testcat?test

4.?命令連接符

?

命令的執行是串行的,一條命令結束才能輸入下一條命令,我們可以在命令之間加上;分割命令,從而可以一?行輸入所有命令。shell會挨個執行。

&&連接符

?

命令1 && 命令2 && 命令3?,shell在判斷出這個表達式的真假后就會停止執行。如果命令1為false,可以判斷表達式?一定為假,執行停止。如果為true,那么還需要執行命令2,一直執行到能判斷真假為止或者執行完被&&連接的命 ???令。

?

||連接符

?&& ?, ?執行到能判斷真假或者所有被連接命令被執行完為止。&&和||的計算方式同c語言中的&& ?||。

4.?shell-變量

?

在shell中使用變量無需定義,在使用的時候創建。并且變量不分類型,shell統一認為是字符串,需要的時候?通過一些命令進行轉換。

變量賦值?:?變量名=?,等號左右不能夠有空格。若字符串中包含空格,則需要用單/雙引號括起來。?可以使用readonly將變量改為只讀類型。

通過?$?引用變量值,?echo?$shell?。?輸入變量,?read?變量名?。

?

引用格式返回值

$var 返回變量值

$var 返回變量值

${#var} 返回變量值的長度

${var:start} 返回從start下標到字符串末尾的子串

${var:start:length} 返回從start下標開始,長度為length的子串

?

實際上還有一些空值判斷、字符串替換和正則匹配拆分字符串等,為了精簡篇幅,這里不再列舉,可自行查閱資料。

?

環境變量

export ?變量名 ?將一個已經存在的本地變量修改為環境變量。 export ?變量名=,定義一個環境變量。

?

位置變量

?

在執行shell腳本的時候,可以傳入參數,如當前有個腳本叫test,?執行sh?test?arg1?arg2?arg3?,那么在test中,$0?代表腳本文件名,$1為第一個參數:arg1,以此類推。 ??使用shift可以將參數左移,此時$1為arg2,$2為arg3, ?$3為? ?$#為參數數量。

?

特殊參數含義

$# 傳遞到腳本的參數數量

$? 前一個命令執行情況,0成功,其他值失敗

$$ 運行當前腳本的進程id

$! 運行腳本最后一個命令

$* 傳遞給腳本或者函數的所有參數

?

5.?shell-變量運算

let

let?表達式?,?會計算此表達式,?如let?i=i+1

(())

((i+=3))

expr

echo?`expr?3?+?5`?,?這里的引號是反引號,tab上面那個鍵。

6.?shell-if

if?條件

then

....

fi

==============================

if?條件;?then?#這里有分號,同一行需要分號,可以參考前面命令連接符?;蛘甙裻hen放到下一行

...

else

...

fi?

==============================

if 條件;?then...

elif 條件;?then...

else...

fi

條件格式為:

1. ?一條完整的命令,或者用||?&&等連接的命令。

2.?字符串比較,[邏輯表達式],[?$shell?!=?"bash"?]?。如果后面字符串不含空格,這里可以不加引號,不等號?是!=。

3. ??需要注意的是, ?[]以及其他部分之前需要用空格分離,注意上面的例子,每個部分都用空格分割。

?

4.?數值比較為?[?$a?-lg?6?],?-lt為less?than,?-le為less?equal,?-eq為equal?,?-ne為not?equal,-ge為greater?than,?-?gt同理。

5.?常用文件測試為:?if?[?-d?arg ]?,如果arg是目錄則為真。-f為文件為真,-r可讀為真,-w可寫,-x可執行等。

?

6.?shell-select

交互式命令,用戶在預定的選項中選擇一個。

select 變量 ?in?列表

do

...

break?done

例子見附件

7.?shell-case

類似c中switch

case $var?in

'選項1') ...?;;

"選項2") ...?;;

選項3 )?,,,

esac

?

匹配選項可以用引號,以可以直接列出。然后加上一個 ??)。

?

7.?shell-for

?

for 變量 ?in?變量列表

do

...

done

?

例子見附件

?

8.?shell-while

?

while?[表達式]?do

...

done

?

例子見附件

?

8.?shell-until

?

until?[表達式]?do

...

done

?

例子見附件

9.?shell-函數

?

[function] 函數名?[()]

{

...

[return?int]

}

[]中內容可以省略。根據測試只能省略一個。如果不設置返回值,則返回最后指令的執行結果。

?

調用方式為?函數名?參數1?參數2

函數中變量也是全局變量,如果要定義局部變量,則在變量賦值前加上local關鍵字,如?local a=5。?在函數中,引用參數是通過$1、$2等完成,$0代表函數名。

實驗內容

1. 完成一鍵配置源的腳本,功能有,備份原有源,然后添加163或者清華源等,然后使用yum的update選項更?新。可以在腳本中加入自己常用的軟件快捷安裝命令,比如vs? code或者chrome的等等。

先進入yum源配置目錄
cd /etc/yum.repos.d
備份系統自帶的yum源
mv CentOS-Base.repo CentOS-Base.repo.save
下載yum源
163的yum源:
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
(會在/etc/yum.repos.d下生成相應的文件)

更新完yum源后,更新一下,使操作立即生效
yum makecache

用新的yum更新系統(速度快很多)

yum -y update

2. ?計算斐波那契數列,第17個值,禁止打表輸出。

shell編程建議看《Linux編程基礎》

或者博主南柯夢的5篇系列博客:https://www.cnblogs.com/dongying/p/6262935.html

3.? 完成一個簡單的交互設計,根據用戶輸入輸出對應內容,具體交互內容隨意,要求至少用上select,case和read。

同第二題

4.?ls?-l?/boot/grub2?&&?cat?/boot/grub2/grub.cfg?|?more,解釋此條命令含義。

如果自己的虛擬機中沒有這兩個目錄,不要緊。反正是解釋又不是要運行23333

&&的使用格式:command1 && command2,command1成功執行后(返回0),繼續執行command2

如果command1執行失敗(例如不存在這個目錄或沒有權限,返回非0) ,此時command2不會執行

(其實這個道理很簡單2333不是跟c語言一樣嘛,唯一的區別是c語言是判斷command的true、false,而shell編程是判斷是否成功執行)

同理,command1 && command2 && command3.....&& commandn 只要有一個執行失敗,后面的命令就不會被執行了

| 是管道,管道前的輸出作為管道后的輸入,在這里就是前兩個命令的輸出用more命令輸出

5. 在腳本中通過管道+一些命令使得腳本自動提權,而不是輸入密碼提權,可能用到的命令echo、sudo、su。

用echo輸出密碼,再通過管道把密碼輸入,從而實現不必要手動輸入密碼提權

6. 設計一個函數,輸入一個字符串,要求輸出字符串第3位~末尾的字串。

?同第二題

轉載于:https://www.cnblogs.com/PineZhuo/p/10539272.html

總結

以上是生活随笔為你收集整理的系统编程第三次上机的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。