Shell函數數組練習

1、編寫函數,實現打印綠色OK和紅色FAILED,判斷是否有參數,存在為Ok,不存在為FAILED

[root@shell ~]# vim ok.sh +

#!/bin/bash

read -p "請輸入一個參數:" i ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
function ok_failed() { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? if [ -z "$i" ]; then ? ? ?
?#-z為檢查字符串長度是否為空,也可以用[ $# -eq 0 ]
? ? ? ? echo -e "\033[31mFAILED\033[0m" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? echo -e "\033[32mOK\033[0m" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? fi ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
} ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
ok_failed ? ? ? ? ? ? ? ? ? ? ?
#若用[ $# -eq 0 ]這里調用函數需要加參數$i?

[root@shell ~]# sh ok.sh 1
請輸入一個參數:1
OK
[root@shell ~]# sh ok.sh 1
請輸入一個參數:
FAILED

2、編寫函數,實現判斷是否無位置參數,如無參數,提示錯誤

[root@shell ~]# vim test_weizhi.sh +

#!/bin/bash

read -p "請輸入參數,若不要參數直接回車:" i
function test_weizhi() {
? ? ? ? if [ $# -eq 0 ];then
? ? ? ? ? ? ? ? echo "Error無參數"
? ? ? ? else
? ? ? ? ? ? ? ? echo "輸入的了$#個參數"
? ? ? ? fi
}
test_weizhi $i

[root@shell ~]# sh test_weizhi.sh?
請輸入參數,若不要參數直接回車:1 2 3 4?
輸入的了4個參數
[root@shell ~]# sh test_weizhi.sh?
請輸入參數,若不要參數直接回車:
Error無參數

3、編寫函數實現兩個數字做為參數,返回最大值

方法一:

[root@shell ~]# vim max_value.sh +

#!/bin/bash

read -p "請輸入兩個數字:" num1 num2
function max_value() {
? ? ? ? if [ $num1 -gt $num2 ];then
? ? ? ? ? ? ? ? echo "最大值為$num1"
? ? ? ? elif [ $num1 -eq $num2 ];then
? ? ? ? ? ? ? ? echo "兩個參數相等"
? ? ? ? else
? ? ? ? ? ? ? ? echo "最大值為$num2"
? ? ? ? fi
}
max_value $num1 $num2

[root@shell ~]# sh max_value.sh?
請輸入兩個數字:1 1
兩個參數相等
[root@shell ~]# sh max_value.sh?
請輸入兩個數字:1 2
最大值為2
[root@shell ~]# sh max_value.sh?
請輸入兩個數字:3 2
最大值為3

方法二:

方法一過于簡單而且bug太多,咱還是要謹慎點,上點難度

[root@shell ~]# vim max_value2.sh +

#!/bin/bash

read -p "請輸入兩個參數:" -a num ? ? ? ?#-a為指定變量類型為數組
function max_value2() {
? ? ? ? if ! [ ${#num[@]} -eq 2 ];then
? ? ? ? ? ? ? ? echo "請輸入兩個參數"
? ? ? ? ? ? ? ? exit 2? ? ? ? ? ? ? ? ? ? ? ? ? ????????
?#如輸入的參數不等于2,則退出腳本
? ? ? ? fi
for i in ${num[@]} ? ? ? ? ? ? ? ? ? ? ?????????
#使用for循環遍歷num數組?
do
? ? ? ? if [[ ! $i =~ ^[0-9]+$ ]];then ?????????
#變量i匹配使用正則表達式匹配是否為數字
? ? ? ? ? ? ? ? echo "請輸入純數字"
? ? ? ? ? ? ? ? exit 2
? ? ? ? fi
done
? ? ? ? if [ ${num[0]} -eq ${num[1]} ];then
? ? ? ? ? ? ? ? echo "請輸入兩個不同的數字"
? ? ? ? ? ? ? ? exit 2
? ? ? ? fi
max=${num[0]} ? ? ? ? ? ? ? ? ? ? ? ?
? #定義最大值的初始值,一般都定義為第一個元素,以第一個元素為基準依次和其它元素比較找到最大值
for i in ${num[@]}
do
? ? ? ? if [ $i -gt $max ];then
? ? ? ? ? ? ? ? max=$i
? ? ? ? fi
done
echo "最大值為$max"
}
max_value2

[root@shell ~]# sh max_value2.sh
請輸入兩個參數:1 2 3
請輸入兩個參數
[root@shell ~]# sh max_value2.sh
請輸入兩個參數:a 2
請輸入純數字
[root@shell ~]# sh max_value2.sh
請輸入兩個參數:1 1
請輸入兩個不同的數字
[root@shell ~]# sh max_value2.sh
請輸入兩個參數:1 2
最大值為2
[root@shell ~]# sh max_value2.sh
請輸入兩個參數:3 2
最大值為3

4、編寫函數,實現兩個整數位參數,計算加減乘除。

方法一:

[root@shell ~]# vim ?calculate.sh +

#!/bin/bash

read -p "請輸入兩個參數:" i v
function calculate() {
? ? ? ? echo "$i+$v=$((i+v))"
? ? ? ? echo "$i-$v=$((i-v))"
? ? ? ? echo "$i*$v=$((i*v))"
? ? ? ? echo "$i÷$v=$((i/v))"
}
calculate

[root@shell ~]# sh calculate.sh
請輸入兩個參數:4 2?
4+2=6
4-2=2
4*2=8
4÷2=2

方法二:

方法一為超級簡化版,咱還是上點難度吧,用if條件判斷吧!(也可以用case這里就懶得寫了都差不多)

[root@shell ~]# vim ?calculate2.sh +

#!/bin/bash

read -p "請輸入運算符:" a
read -p "請輸入第一個整數:" i
read -p "請輸入第二個整數:" v
?
function calculate2() {
? ? ? ? if [ "$a" = "+" ];then
? ? ? ? ? ? ? ? echo "$i+$v=$((i+v))"
? ? ? ? elif [ "$a" = "-" ];then
? ? ? ? ? ? ? ? echo "$i-$v=$((i-v))"
? ? ? ? elif [ "$a" = "*" ];then
? ? ? ? ? ? ? ? echo "$i*$v=$((i*v))"
? ? ? ? elif [ "$a" = "/" ];then
? ? ? ? ? ? ? ? echo "$i÷$v=$((i/v))"
? ? ? ? else
? ? ? ? ? ? ? ? echo "請輸入合法與算法符"
? ? ? ? fi
}
calculate2

[root@shell ~]# sh calculate2.sh +
請輸入運算符:+
請輸入第一個整數:4
請輸入第二個整數:7
4+7=11
[root@shell ~]# sh calculate2.sh +
請輸入運算符:-
請輸入第一個整數:6
請輸入第二個整數:3
6-3=3
[root@shell ~]# sh calculate2.sh +
請輸入運算符:*
請輸入第一個整數:4
請輸入第二個整數:3
4*3=12
[root@shell ~]# sh calculate2.sh +
請輸入運算符:/
請輸入第一個整數:6
請輸入第二個整數:2
6÷2=3
[root@shell ~]# sh calculate2.sh +
請輸入運算符:&
請輸入第一個整數:3
請輸入第二個整數:3
請輸入合法與算法符

5、將/etc/shadow文件的每一行作為元數賦值給數組

[root@shell ~]# vim?shadow.sh +

#!/bin/bash

function shadow() { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? declare -A arry_shadow ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? while read line

? ? ? ? do ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? arry_shadow+=([$line]=$line) ? ?
#將當前行的內容作為關聯數組arry_shadow的鍵和值
? ? ? ? done < /etc/shadow ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? for key in "${!arry_shadow[@]}" ? ? ? ?
#!為返回對應的鍵值
? ? ? ? do ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? echo "${arry_shadow[$key]}" ? ? ? ? ? ??
? ? ? ? done ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
} ? ? ? ?

line=1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
shadow
?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

[root@shell ~]# sh shadow.sh?

6、使用關聯數組統計文件/etc/passwd中用戶使用的不同類型shell的數量

[root@shell ~]# awk -F: '{count[$NF]++} END{for (shell in count) print count[shell], shell}' /etc/passwd | sort -n
1 /bin/sync
1 /sbin/halt
1 /sbin/shutdown
2 /usr/sbin/nologin
3 /bin/bash
32 /sbin/nologin

這里count[$NF]++定義一個關聯數字,元素出現次數進行累加,最后使用for循環遍歷count數組,打印元素出現的次數和其元素?

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

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

相關文章

mac 安裝nvm以及切換node版本詳細步驟

1、nvm介紹&#xff08;node版本管理工具&#xff09; nvm 可以讓你通過命令行快速安裝和使用不同版本的node 有時候項目太老&#xff0c;node版本太高,執行npm install命令會報錯,可以借助nvm切換低版本的node。 2、安裝nvm 在終端執行安裝命令 curl -o- https://raw.gith…

后端只打印了info等級的日志?-SpringBoot日志打印-Slf4j

在調用log變量的方法來輸出日志時&#xff0c;有以上5個級別對應的方法&#xff0c;從不太重要&#xff0c;到非常重要 調用不同的方法&#xff0c;就會輸出不同級別的日志。 trace&#xff1a;跟蹤信息debug&#xff1a;調試信息info&#xff1a;一般信息warn&#xff1a;警告…

1、混合方式UI設計

1、混合方式UI設計 新建項目添加靜態資源添加資源添加action添加菜單菜單欄工具欄中間編輯區域 代碼添加其他組件字體和大小狀態欄 添加槽函數UI設置的轉到槽的手寫的設置應用程序圖標 代碼 新建項目 MainWindow代碼文件夾主窗口為 (QMainWindow) 添加靜態資源 AppIcon.icoi…

scikit-learn-feature_selection

參考&#xff1a; Feature selection 1. 移除低方差的特征 方差低&#xff0c;說明變化不大。 將特征方差值小于一定值的特征移除 單變量特征分析 通過單特征分析&#xff0c;選擇最好的&#xff08;前k個&#xff09;的特征&#xff0c;scikit-learn 提供的方法有&#x…

LeetCode-1475. 商品折扣后的最終價格【棧 數組 單調棧】

LeetCode-1475. 商品折扣后的最終價格【棧 數組 單調棧】 題目描述&#xff1a;解題思路一&#xff1a;暴力解法。兩層for。解題思路二&#xff1a;單調棧&#xff0c;具體思路是反向遍歷數組prices。遇到棧頂元素小于當前元素的就出棧&#xff0c;目的是為了找到當前位置右邊的…

基于JAVA+SpringBoot+Vue的前后端分離的旅游網站

?全網粉絲20W,csdn特邀作者、博客專家、CSDN新星計劃導師、java領域優質創作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域和畢業項目實戰? &#x1f345;文末獲取項目下載方式&#x1f345; 一、項目背景介紹&#xff1a; 近年來&#xff0c;隨…

區塊鏈的可拓展性研究【01】layer1

什么是一層網絡&#xff1f; 一層網絡是底層區塊鏈。以太坊和比特幣都是一層網絡區塊鏈&#xff0c;因為它們是基石&#xff0c;各種二層網絡都構建于其上。二層網絡項目的示例包括以太坊上的“卷疊”和基于比特幣的閃電網絡。所有這些二層網絡項目上的用戶交易活動最終都可以回…

IntelliJ IDEA 自帶的 HTTP Client接口調用插件,替代 Postman

文章目錄 引言建議目錄結構新建請求不同環境的變量配置添加環境http-client.env.jsonhttp-client.private.env.json引用變量 請求示例Get請求示例Post請求示例鑒權示例斷言示例Websocket請求示例 內置對象和動態變量內置對象&#xff1a;內置變量&#xff1a; 引言 在日常的 W…

關于引用unpkg.com的mars3d相關依賴文件報錯無法請求的說明

問題來源&#xff1a; 1.關于引用unpkg.com的mars3d相關依賴文件報錯無法請求的說明 說明&#xff1a; 1.最近npm、unpkeg都訪問異常&#xff0c;可能是unpkg.com等國外的服務器不穩定導致的請求未響應。 解決方案&#xff1a; 1.請切換靜態文件引入的方式請求相關資源。參…

LaTex:如何在數學環境下打出大的右括號“}“

一般來說多行公式打左大括號都知道使用語法"cases" \begin{cases} foo\\ foo\\ \end{cases}最近需要鍵入右邊大花括號括起來公式的時候犯難了&#xff0c;搜了很多用的都是"\left.array\right}"&#xff0c;看得我昏迷&#xff0c;屢屢報錯。 突然想起很久…

selenium自動化(中)

顯式等待與隱式等待 簡介 在實際工作中等待機制可以保證代碼的穩定性&#xff0c;保證代碼不會受網速、電腦性能等條件的約束。 等待就是當運行代碼時&#xff0c;如果頁面的渲染速度跟不上代碼的運行速度&#xff0c;就需要人為的去限制代碼執行的速度。 在做 Web 自動化時…

PS背景色替換

1.打開ps后右鍵圖層復制 2.隱藏復制的圖層&#xff0c;選擇魔術橡皮擦擦掉不用替換的顏色 3.選中圖層后選擇顏色疊加修改圖層顏色

機器學習-SVM(支持向量機)

推薦課程&#xff1a;【機器學習實戰】第5期 支持向量機 |數據分析|機器學習|算法|菊安醬_嗶哩嗶哩_bilibili 贊美菊神ヾ ( ゜ⅴ゜)&#xff89; 一、什么是支持向量機&#xff1f; 支持向量機&#xff08;Support Vector Machine, SVM&#xff09;是一類按監督學習&#xff0…

RAID(冗余獨立磁盤陣列)介紹(一種用于存儲數據的技術,通過將數據分布在多個硬盤驅動器上,以提高數據的可靠性和性能)

文章目錄 RAID介紹什么是RAID&#xff1f;RAID的歷史RAID的類型RAID 0RAID 1RAID 5RAID 6 RAID的選擇和配置RAID在安裝系統時的應用結論 RAID介紹 RAID&#xff08;冗余獨立磁盤陣列&#xff09;是一種用于存儲數據的技術&#xff0c;它通過將數據分布在多個硬盤驅動器上&…

【神行百里】pandas查詢加速之行索引篇

最近進行大數據處理的時候&#xff0c;發現我以前常用的pandas查詢方法太慢了&#xff0c;太慢了&#xff0c;真是太慢了&#xff0c;查閱資料&#xff0c;遂發現了一種新的加速方法&#xff0c;能助力我飛上天&#xff0c;和太陽肩并肩&#xff0c;所以記錄下來。 1. 場景說明…

跨境獨立站優勢包括哪些?是否值得做呢?

跨境獨立站的優勢主要包括&#xff1a; 自主品牌建設&#xff1a;獨立站可以更好地展示自主品牌形象&#xff0c;提高品牌知名度和美譽度。 獨立域名&#xff1a;獨立站可以擁有自己的域名&#xff0c;更加穩定和可信。 自主運營&#xff1a;獨立站可以自主運營&#xff0c;包…

低版本echarts的升級到新版5.4.0的echarts瀏覽器預警和報錯信息

新版5.4.0的echarts瀏覽器預警和報錯信息 [ECharts] DEPRECATED: ‘normal’ hierarchy in itemStyle has been removed since 4.0. All style properties are configured in itemStyle directly now. 因為normal層被移除&#xff0c;問題代碼如下圖所示 itemStyle: {normal:…

MBR30200FCT-ASEMI大電流肖特基MBR30200FCT

編輯&#xff1a;ll MBR30200FCT-ASEMI大電流肖特基MBR30200FCT 型號&#xff1a;MBR30200FCT 品牌&#xff1a;ASEMI 封裝&#xff1a;TO-220F 最大平均正向電流&#xff1a;30A 最大重復峰值反向電壓&#xff1a;200V 產品引線數量&#xff1a;3 產品內部芯片個數&am…

系統韌性研究(7)| 韌性系統的16大指導原則

不良事件和條件可能會中斷系統&#xff0c;導致系統無法提供必要的功能和服務。正如我在本系列的前幾篇文章中所概述的那樣&#xff0c;韌性是大多數系統的一個基本質量屬性&#xff0c;因為它們提供了關鍵的能力和服務&#xff0c;盡管存在著不可避免的困難&#xff0c;但這些…

文件搜索項目知識介紹

項目背景SQLite介紹SQLite、驅動包下載SQLite使用SQLite和MySQL區別 JDBC搭配SQLiteJDBC原理-創建連接JDBC原理-關閉連接添加和發送SQLJDBC-事務開啟和提交 打包.exe文件線程池線程數量問題 項目背景 需求上&#xff1a;因為Windows的文件搜索工具搜索速度十分的慢&#xff1b…