shell函数与数组(了解函数,递归函数运用,了解数组,创建基数和偶数数组,冒泡排序,调试命令)
文章目錄
- shell函數
- 了解函數
- 函數定義
- 遞歸函數
- 舉例子
- shell數組
- 定義數組
- 數組包括的數據類型與數組操作
- 數組操作
- 舉例(快速創建數組、奇數數組)
- 冒泡排序法
- 調試命令
- set命令
- bash/sh
shell函數
了解函數
1、在編寫shell腳本程序時,將一些需要重復使用的命令操作,定義為公共使用的語句塊,既可以成為函數
2、合理使用shell函數,可以使腳本更加簡潔,增強程序的易讀性,提高執行效率
函數定義
- return返回的是狀態碼,需要使用$?調取
- echo 返回的是值,使用變量調用
全局聲明函數
如果你希望直接從終端調用函數,可以將函數定義在主目錄下的 .profile 文件,這樣每次登錄后,在命令提示符后面輸入函數名字就可以立即調用
#!/bin/bash function xue(){read -p "請輸入第一個整數" naread -p "請輸入第二個整數" nbname=$[$na+$nb]echo $namereturn 100 } [root@localhost ~]# vim .bashrc (局部聲明) [root@localhost ~]# source .bashrc (更新) [root@192 ~]# xue 請輸入第一個整數1 請輸入第二個整數2 3遞歸函數
遞歸就是程序不斷調用自身,遞歸方法就是方法直接或間接調用自身的方法。自己調用自己
舉例子
列舉出/var/log/下所有的文件,使用層次性輸出。
#!/bin/bashfunction list_files(){for f in ` ls $i`doif [ -d "$1/$f" ];thenecho "$2$f "list_files "$1/$f"" $2 "elseecho "$2$f"fidone } list_files "/var/log" "" [root@192 ~]# sh acd.txt 1.sh 2 2.txt 3 abn.sh acd.txt a.txt backup b.sh c.sh e.txt httpd-2.4.25.tar.gz ls.txr opt.zhang o.txt 公共 模板 視頻 圖片 文檔 下載 音樂 桌面shell數組
數組就是把有限個元素變量或數組用一個名字命名,然后用編號區分他們的變量的集合。這個名字成為數組名,編號成為數組下標。組成數組的各個變量成為數組的分量,也稱為數組的元素,有時也稱為下標變量。
定義數組
方法1
基本格式log 數組名=(log0 log1 log2...) 例如 ABC=(11 22 33 44) [root@promote ~]# zhang=(11 22 33 44 55 ) [root@promote ~]# echo $zhang 11 [root@promote ~]# echo ${zhang[*]} 11 22 33 44 55 [root@promote ~]# echo ${zhang[@]} 11 22 33 44 55方法2
基本格式 數組名=([0]=value [1]=value [2]=value...) [root@promote ~]# wan=([0]=33 [1]=44 [2]=55 [3]=66 ) [root@promote ~]# echo ${wan[@]} 33 44 55 66 [root@promote ~]# echo ${wan[*]} 33 44 55 66方法3:數組元素之間使用空格隔開
基本格式 列表名=“value0 value1 value2” 數組名=($列表名) [root@localhost ~]# list="11 22 33 44 " [root@localhost ~]# num=($list ) [root@localhost ~]# echo ${num[*] } 11 22 33 44方法4:
基本格式 數組名[0]=“value” 數組名[1]=“value” 數組名[2]=“value” 例如 AAA[0]=“11” AAA[1]=“22” AAA[2]=“33” ...替換數組元素
[root@localhost ~]# zhang=( 11 22 33 44 55 66 ) [root@localhost ~]# echo ${zhang[*]} 11 22 33 44 55 66 [root@localhost ~]# zhang[1]=88 [root@localhost ~]# echo ${zhang[*]} 11 88 33 44 55 66數組包括的數據類型與數組操作
數組只可存放數值或字符
下標從0開始
數組操作
獲取數組長度 [root@localhost ~]# A=( a b c d e) [root@localhost ~]# echo ${A[*] } a b c d e [root@localhost ~]# echo ${#A[*] } 5舉例(快速創建數組、奇數數組)
列出1-100的數,并將1-100和1-100的奇數定義為數組
!/bin/bashfor ((i=1;i<=99;i++));doarr[$i]=$i done echo echo ${arr[*]} [root@localhost ~]# sh 49.txt.sh 1 2 3 4 5 6 7 8 9 10 11 12 13快速創建一個數組,元素由用戶自己定義
#!/bin/bash i=0 while true doread -p "是否存入元素(yes/no) " doingif [ $doing == "no" ];thenbreakfiread -p "請存入第$[$i+i]個元素 :" keyarr[$i]=$keylet i++done echo ${arr[*]} ~ [root@localhost ~]# sh 57.txt.sh 是否存入元素(yes/no) yes 請存入第0個元素 :10 是否存入元素(yes/no) yes 請存入第2個元素 :20 是否存入元素(yes/no) yes 請存入第4個元素 :30 是否存入元素(yes/no) yes 請存入第6個元素 :40 是否存入元素(yes/no) no 10 20 30 40讓70 56 45 90 80 分沒到60的變成60
#!/bin/bash zhang=(70 56 45 90 80 )for ((i=0;i<${#zhang[*]};i++));do if [ ${zhang[$i]} -lt 60 ];thennew[$i]=60 elsenew[$i]=${zhang[$i]} fi done echo ${new[*]} [root@192 ~]# sh acsd.txt 70 60 60 90 80#遍歷數組,對未滿60的元素直接刪除
[root@localhost opt]# vim arr4.sh #!/bin/bash score=(12 90 80 99 43 60 90 4 5 7 8 4 3 4) i=0 for f in ${score[*]} doif [ $f -lt 60 ];thenunset score[$i]filet i++ done echo ${score[*]} [root@localhost opt]# sh arr4.sh 90 80 99 60 90冒泡排序法
示意圖
外層是輪內層是次
然后要交換兩個瓶子中的水,必須找一個空瓶子作為媒介,根據一定的條件就可以換過來。
步驟過程
對比 前面下標 大于 后面下標 要放到后面
小的下標 賦予空瓶子
小的下標空了,把大的賦予小的
大的空了 瓶子里的小下標賦予到大的里面
[root@localhost opt]# vim arr3.sh #!/bin/bash #快速創建一個數組 for ((i=0;i>=0;i++)) doread -p "請輸入你需要定義數組元素:" num #如果輸入空字符,那么退出本次循環if [ -z $num ];thenbreak #否則把輸入的數字賦值給數組元素elsearr[$i]=$numfi done echo "你的數組是:${arr[*]}"#定義數組前一個元素 for ((i=0;i<${#arr[*]};i++)) do#定義數組后一個元素for ((a=$i+1;a<${#arr[*]};a++))do #條件判斷,如果前一個元素大于后一個元素,就交換位置,否則下一次循環if [ ${arr[$i]} -gt ${arr[$a]} ];then #交換位置temp=${arr[$i]}arr[$i]=${arr[$a]}arr[$a]=$temp #fidone done echo "你的數組升序排列為:${arr[*]}" [root@localhost opt]# sh arr3.sh 請輸入你需要定義數組元素:45 請輸入你需要定義數組元素:1 請輸入你需要定義數組元素:32 請輸入你需要定義數組元素:55 請輸入你需要定義數組元素:4 請輸入你需要定義數組元素: 你的數組是:45 1 32 55 4 你的數組升序排列為:1 4 32 45 55調試命令
set命令
set -x:開啟調節模式
set +x:關閉調節模式
- [root@localhost opt]# vim arr4.sh #!/bin/bash #遍歷數組,對未滿60的元素直接刪除 score=(12 90 43 60 90 4 4) i=0 for f in ${score[*]} do set -xif [ $f -lt 60 ];thenunset score[$i]fi set +xlet i++ done echo ${score[*]} [root@localhost opt]# sh arr4.sh + '[' 12 -lt 60 ']' + unset 'score[0]' + set +x + '[' 90 -lt 60 ']' + set +x + '[' 43 -lt 60 ']' + unset 'score[2]' + set +x + '[' 60 -lt 60 ']' + set +x + '[' 90 -lt 60 ']' + set +x + '[' 4 -lt 60 ']' + unset 'score[5]' + set +x + '[' 4 -lt 60 ']' + unset 'score[6]' + set +x90 60 90
bash/sh
選項: -n:顯示腳本錯誤 -v:顯示腳本信息 -x:表示跟蹤腳本 [root@localhost opt]# sh -x arr1.sh arr1.sh:行5: 未預期的符號 `arr1[$i]=$[$i+1]' 附近有語法錯誤 arr1.sh:行5: `arr1[$i]=$[$i+1]'總結
以上是生活随笔為你收集整理的shell函数与数组(了解函数,递归函数运用,了解数组,创建基数和偶数数组,冒泡排序,调试命令)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内存启动不了?3200MHz频率惹的祸,
- 下一篇: 固态硬盘VS内存条:谁才是电脑性能的真正