Linux實驗 Shell編程

  • 實驗目的:
  1. 熟練掌握Shell程序的建立與執行;
  2. 掌握Shell變量的兩種類型(Shell環境變量和用戶自定義變量)及其用法;
  3. 掌握Shell中的特殊字符、算術與邏輯運算;
  4. 掌握Shell中輸入輸出命令;
  5. 掌握Shell程序控制結構語句。

實驗內容:

在VMware中啟動CentOS7虛擬機后,打開putty或者MobaXterm,遠程登錄root賬號,完成以下任務,截圖并粘貼于以下空行中。

利用vi在宿主目錄中編寫一個名為test8_1.sh的Shell程序,該程序查看當前目錄和日期(腳本代碼如下),并用給定的三種方式執行。

#!/bin/bash

echo "The current directory has the following files"

ls

echo "today is"

date

sh<程序名

sh?程序名

用chmod?a+x 程序名,使該程序成為可執行文件,然后進入該程序文件所在目錄,執行./程序名

說明:在這三種運行Shell程序的方法中,最好按下面的方式選擇:當剛創建一個Shell程序,對它的正確性還沒有把握時,最好使用第一或第二種方式進行調試。當一個Shell程序已經調試好時,應使用第三種方式把它固定下來,以后只要鍵入相應的文件名即可,并可被另一個程序所調用。另外,注意這三種運行方法都是創建一個新的Shell子進程來執行腳本內容。

利用vi在宿主目錄中編寫一個名為test8_2.sh的Shell程序,該程序在用戶輸入年、月之后,自動打印數出該年該月的日歷。任選一種方法執行該程序。

#!/bin/bash

echo "Please input the month : "

read month

echo "Please input the year : "

read year

cal ?????

Shell編程中,單引號和雙引號是有區別的:單引號里所有字符或字符串都視為一般字符,而雙引號仍然可以保留$、倒引號、反斜線\等特殊功能。比較以下兩個命令的結果。

#!/bin/bash

echo "Please input your name?"

read name

echo "Hello, $name ! The number of users in the system is `who |wc -l`."

echo 'Hello, $name ! The number of users in the system is `who |wc -l`.'

利用vi在宿主目錄中編寫一個名為test8_4.sh的Shell程序,該程序根據用戶輸入的分數判斷成績是否通過考試。

#法1:使用if語句

#!/bin/bash

echo??$score??"please?input?a?score:\c"

read?score

echo?"Your score?is?$score"

if???????[?$score -ge 60 ]; then?????? #變量score的值大于等于60

then?echo?"Congratulation!?You?Pass?the?Examination."

else?echo?"Sorry!?You?Fail?the?Examination!"

?if?

#法2:使用case語句。注意理解由通配符和“|”隔開的多個模式組成的表達式。

#!/bin/bash

echo ?$score??"please input a score:\c"

read score

echo "Your score is $score"

case ?$scorr???in?

?[0-9]|[1-5][0-9]) echo "Sorry! You Fail the Examination!" ;; ?#0-9或者10-59

?[6-9][0-9]|100) echo "Congratulation! You Pass the Examination." ;; ?#60-99或者100

?esac?

利用vi在宿主目錄中編寫一個名為test8_5.sh的Shell程序,該程序模擬一個多任務維護界面,當執行程序先顯示菜單,然后進行選擇后做相應的維護監控操作。顯示菜單使用自定義函數實現。

#!/bin/bash

display()

{

echo " -----?Command Help Menu?-----"

echo " h Show command help?menu. "

echo " f Show all available block devices.?"

echo " d Show the remaining disk space. "

echo " m Show the memory usage. "

echo " u Show how long the system is running. "

echo " q exit the program. "

}

display

while true

do

echo "Please select what you want to do?(help h)"

read action

case ?$action???in?

h) display;;???

f) lsblk;;

d) df -h;;

m) free -m;;

u) uptime;;

q) exit;;

??esac??

??done??

已知變量a=3,b=2,完成以下算術運算,并截圖。

expr方法。注意運算符前后都有空格。

代碼:expr $a - $b,用于計算a與b的差。仿此計算:

a與b的乘積。

a除以b的商。

a除以b的余數。

#!/bin/bash

a=3

b=2

# 計算 a 與 b 的乘積

product=$(expr $a \* $b)

echo "乘積: $product"

# 計算 a 除以 b 的商

quotient=$(expr $a / $b)

echo ": $quotient"

# 計算 a 除以 b 的余數

remainder=$(expr $a % $b)

echo "余數: $remainder"

let方法。運算符前后不需要有空格,需要結合echo命令輸出結果。

代碼:let c=$a-$b; echo $c,用于計算變量a與b差。仿此計算:

a與b的乘積

a的b次方。符號“**”對兩個變量做冪運算。

#!/bin/bash

a=3

b=2

# 計算 a 與 b 的乘積

let c=$a*$b

echo "乘積: $c"

# 計算 a 的 b 次方

let d=$a**$b

echo "冪: $d"

$((表達式))方法。運算符前后不需要有空格,且表達式中的變量前面不需要加上$符號,需要結合echo命令輸出結果。

運行代碼:c=$((a-b)); echo $c,用于計算變量a與b差。仿此計算:

a與b的乘積

a的b次方。符號“**”對兩個變量做冪運算。

#!/bin/bash

a=3

b=2

# 計算 a 與 b 的乘積

c=$((a*b))

echo "乘積: $c"

# 計算 a 的 b 次方

d=$((a**b))

echo "冪: $d"

$[表達式]方法。與$((表達式))方法類似。

運行代碼::c=$[a-b]; echo $c,用于計算變量a與b差。仿此計算:

a與b的乘積

a的b次方。符號“**”對兩個變量做冪運算。

#!/bin/bash

a=3

b=2

# 計算 a 與 b 的乘積

c=$((a*b))

echo "Product: $c"

# 計算 a 的 b 次方

d=$((a**b))

echo "Power: $d"

利用vi在宿主目錄中編寫一個名為test8_7.sh的Shell程序,該程序實現計算用戶輸入命令后的若干個數字參數的和。例如運行sh test8_7.sh 1 2 3,結果是1、2、3的和6。

#法一:用for循環

#!/bin/bash

sum=0

for i #這里for i?完整的寫法應該是???????

do

let ??????????

done

echo sum=????

#法二:用while循環和shift命令(注意理解shift命令的用法。供參考)

#!/bin/bash

sum=0

while [ $# -ne 0 ] #這里的$#表示命令后所有參數$1、$2…的總個數

do

let sum=$sum+$1 #想想這里為什么是$1

shift

done

echo sum=$sum

利用vi在宿主目錄中編寫一個名為test8_8.sh的Shell程序,該程序把當前目錄下的所有*.sh文件到指定的目錄(如home目錄下某個普通用戶的家目錄下)中,并顯示復制后該目錄內按文件大小排序的目錄文件清單。

echo "Please enter the destination directory name that you want to copy:"

read dir

if ????????? #文件測試。若變量dir代表的文件存在且是目錄文件

then

for filename in ????? #所有*.sh文件,使用通配符

do

cp $filename ???? #將所有*.sh文件復制到目標目錄

done

ls -l $dir | sort -n -r -k 5 #-n數值排序,-r逆序,-k?5按第5個字段。教材P83

else

echo "$dir is a bad directory name."

fi

思考:

Shell變量兩種類型,即Shell環境變量和____局部變量_________。Shell環境變量又分成可寫和只讀兩大類。

在使用用戶自定義變量時,要在變量名前面加上符號__$___。

Shell標準輸入命令是__<stdin>_____,輸出命令是___<stdout>_____。

Shell順序結構中的操作符有4種:順序分隔符(;)、__邏輯否(!)_______、邏輯與(&&)和邏輯或(||)。

通過使用Linux/Unix中文件重定向命令,可以將命令的輸入、輸出以及錯誤消息重定向到其他文件中,重定向方式有以下幾種:輸入重定向命令、輸出重定向命令、輸出附加定向命令和標準錯誤重定向命令,它們使用的符號分別是什么?

輸入重定向命令:<

輸出重定向命令:>

輸出附加定向命令:>>

標準錯誤重定向命令:2>

Shell選擇分支結構主要有2類:if語句和____case___語句。

Shell循環結構有3類語句:for語句、__while____語句和until語句。

Shell循環結構中的循環體需要放在___do__和___done___兩個關鍵字之間。

Shell腳本中,退出腳本程序命令是____exit____。

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

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

相關文章

在Windows環境下安裝CPU版的PyTorch

PytTorch是基于Python開發的&#xff0c;首先需要安裝Python&#xff0c;Python的安裝很簡單&#xff0c;這里不再贅述。而 Windows用戶能直接通過conda、pip和源碼編譯三種方式來安裝PyTorch。 打開PyTorch官網&#xff08;PyTorch&#xff09;&#xff0c;在主頁中根據自己的…

基于OpenCV年齡與性別識別系統

深入解析基于OpenCV年齡與性別識別系統 在這篇博客中&#xff0c;我們將詳細解析一個使用OpenCV進行年齡和性別識別的Python腳本。這個腳本展示了如何利用深度學習模型&#xff0c;從視頻或圖像中檢測人臉并預測每個人臉的年齡和性別。 1. 導入必要的模塊 import cv2 as cv …

ELK的詳解

ELK是由Elasticsearch、Logstash和Kibana三個開源軟件&#xff08;后來又新加了一個FileBeat&#xff09;組成的日志管理解決方案&#xff0c;這一組合在近年來得到了廣泛的關注和應用。以下是對這三個組件的詳細說明&#xff1a; Elasticsearch&#xff1a; Elasticsearch是…

nginx 負載均衡配置詳解

基于 ${nginx_home}/conf/nginx.conf 文件配置實現&#xff0c;如下&#xff1a; http {# 定義server地址upstream server_group {server 192.168.xxx.1:8080;server 192.168.xxx.2:8080;server 192.168.xxx.3:8080;}server {listen 80;location / {root html;index …

python數據分析——時間序列

時間序列 前言一、Datetime 模塊常用函數和數據結構的詳細解釋datetime模塊示例一示例二 二、時間運算示例一示例二示例三 三、時間序列分析自回歸(Autoregressive model/AR)模型示例 滑動平均(moving average model/MA)模型示例 自回歸滑動平均(Autoregressive moving average…

持續總結中!2024年面試必問 100 道 Java基礎面試題(四十五)

上一篇地址&#xff1a;持續總結中&#xff01;2024年面試必問 100 道 Java基礎面試題&#xff08;四十四&#xff09;-CSDN博客 八十九、在Java中&#xff0c;什么是線程局部變量&#xff08;ThreadLocal變量&#xff09;&#xff1f; 在Java中&#xff0c;ThreadLocal變量是…

企業微信hook接口協議,ipad協議http,發送鏈接的方式邀請成員進群

發送鏈接的方式邀請成員進群 參數名必選類型說明uuid是String每個實例的唯一標識&#xff0c;根據uuid操作具體企業微信 請求示例 {"uuid":"3240fde0-45e2-48c0-90e8-cb098d0ebe43","roomid":10696052955013729, "vids":[788130334…

Flutter 中的 CircleAvatar 小部件:全面指南

Flutter 中的 CircleAvatar 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;CircleAvatar 是一個用于顯示頭像的圓形控件&#xff0c;通常包含一個圖標、圖片或者一個簡單的文本字符。它在設計上與 Material Design 指南中的頭像規范相匹配&#xff0c;常用于展示用戶信…

C# 常用匯總

時間處理 public static class DateTimeHelper{/// <summary>/// 獲取當前時間戳&#xff08;Unix時間戳&#xff09; /// </summary>/// <returns></returns>public static long GetCurrentUnixTimestamp(){DateTimeOffset offset DateTimeOffset.…

Qt---文件系統

一、基本文件操作 1. QFile對文件進行讀和寫 QFile file( path 文件路徑) 讀&#xff1a; file.open(打開方式) QlODevice::readOnly 全部讀取->file.readAll()&#xff0c;按行讀->file.readLine()&#xff0c;atend()->判斷是否讀到文件尾 …

Java網絡編程基礎

Java網絡編程基礎主要涉及進程間通信、網絡通信協議、IP地址和端口以及Java提供的網絡應用編程接口等核心概念。 進程間通信是Java網絡編程的基礎。進程是運行中的程序&#xff0c;而進程間通信則是指不同進程之間進行數據交換和共享信息的過程。在Java中&#xff0c;進程間的…

STM32存儲左右互搏 USB接口FATS文件讀寫U盤

STM32存儲左右互搏 USB接口FATS文件讀寫U盤 STM32的USB接口可以例化為Host主機從而對U盤進行操作。SD卡/MicroSD/TF卡也可以通過讀卡器轉換成U盤使用。這里介紹STM32CUBEIDE開發平臺HAL庫實現U盤FATS文件訪問的例程。 USB接口介紹 常見的USB接口電路部分相似而有不同的連接器…

K8S -----二進制搭建 Kubernetes v1.20

目錄 一、準備環境 1.1 修改主機名 1.2 關閉防火墻&#xff08;三臺一起&#xff0c;這里只展示master01&#xff09; 1.3 在master添加hosts&#xff08;依舊是三臺一起&#xff09; 1.4 調整內核參數并開啟網橋模式 二、部署docker引擎 三、部署 etcd 集群 1.在mast…

15.JUC原子類

文章目錄 JUC原子類1.JUC中的Atomic原子操作包1.1. 基本原子類&#xff08;Basic Atomic Classes&#xff09;1.2. 數組原子類&#xff08;Array Atomic Classes&#xff09;1.3. 引用原子類&#xff08;Reference Atomic Classes&#xff09;4. 字段更新原子類&#xff08;Fie…

StackQueue+泛型簡單理解

&#x1f341; 個人主頁&#xff1a;愛編程的Tom&#x1f4ab; 本篇博文收錄專欄&#xff1a;Java專欄&#x1f449; 目前其它專欄&#xff1a;c系列小游戲 c語言系列--萬物的開始_ &#x1f389; 歡迎 &#x1f44d;點贊?評論?收藏&#x1f496;三連支持一…

ddpm Denoising Diffusion Probabilistic Model 學習筆記

目錄 Stable Diffusion 文章的貢獻抽象出來就兩個 潛空間上做擴散生成 ddpm(Denoising Diffusion Probabilistic Model)學習筆記 算法原理 unet預測噪聲 unet推理過程 重參數化技巧 &#xff08;1&#xff09;利用前一時刻的 xt-1 得到任意時刻的噪聲圖片 xt&#xff…

LeetCode2215找出兩數組的不同

題目描述 給你兩個下標從 0 開始的整數數組 nums1 和 nums2 &#xff0c;請你返回一個長度為 2 的列表 answer &#xff0c;其中&#xff1a;answer[0] 是 nums1 中所有 不 存在于 nums2 中的 不同 整數組成的列表。answer[1] 是 nums2 中所有 不 存在于 nums1 中的 不同 整數組…

Linux poweroff命令教程:如何實現一鍵關機(附實例詳解和注意事項)

Linux poweroff命令介紹 poweroff命令是用來關閉系統的。當你執行這個命令時&#xff0c;它會發送一個信號給系統&#xff0c;告訴系統關閉所有的進程&#xff0c;然后關閉系統。這個命令非常有用&#xff0c;特別是在你需要遠程關閉系統&#xff0c;或者你的系統沒有圖形用戶…

Autosar架構

藍框那種叫component&#xff0c;綠框的叫function cluster。 接口 有三種接口&#xff0c;RTE跟SWC之間鏈接的叫Autosar Interface&#xff0c;RTE跟BSW的Components鏈接是Standardized Interface&#xff0c;RTE跟BSW的services鏈接的是Standardized Autosar Interface。 St…

項目部署到線上proxytable代理失效nginx報404的問題

我的項目是在vue的config文件夾中的index.js中配置了接口地址 &#xff0c;本地跑的時候都能訪問&#xff0c;放到線上就報404&#xff1b; module.exports {dev: {// PathsassetsSubDirectory: static,assetsPublicPath: /,proxyTable: {/xxx: {target: http://xxxxxxxx:xxx…