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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

shell函数与数组(了解函数,递归函数运用,了解数组,创建基数和偶数数组,冒泡排序,调试命令)

發(fā)布時(shí)間:2024/2/28 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shell函数与数组(了解函数,递归函数运用,了解数组,创建基数和偶数数组,冒泡排序,调试命令) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • shell函數(shù)
    • 了解函數(shù)
    • 函數(shù)定義
    • 遞歸函數(shù)
    • 舉例子
    • shell數(shù)組
    • 定義數(shù)組
  • 數(shù)組包括的數(shù)據(jù)類(lèi)型與數(shù)組操作
    • 數(shù)組操作
    • 舉例(快速創(chuàng)建數(shù)組、奇數(shù)數(shù)組)
    • 冒泡排序法
    • 調(diào)試命令
    • set命令
    • bash/sh

shell函數(shù)

了解函數(shù)

1、在編寫(xiě)shell腳本程序時(shí),將一些需要重復(fù)使用的命令操作,定義為公共使用的語(yǔ)句塊,既可以成為函數(shù)

2、合理使用shell函數(shù),可以使腳本更加簡(jiǎn)潔,增強(qiáng)程序的易讀性,提高執(zhí)行效率

函數(shù)定義

  • return返回的是狀態(tài)碼,需要使用$?調(diào)取
  • echo 返回的是值,使用變量調(diào)用
函數(shù) #!/bin/bash function xue(){read -p "請(qǐng)輸入第一個(gè)整數(shù)" naread -p "請(qǐng)輸入第二個(gè)整數(shù)" nbname=$[$na+$nb] echo $name return 100 返回狀態(tài)碼 } number=`xue` 賦予namber值 echo $? 顯示狀態(tài)碼 echo $number 顯示出值多少 root@192 ~]# sh c.sh 輸入你的一個(gè)整數(shù)10 輸入你的二個(gè)整數(shù)20 100 和:30 [root@192 ~]# echo $? 0

全局聲明函數(shù)

如果你希望直接從終端調(diào)用函數(shù),可以將函數(shù)定義在主目錄下的 .profile 文件,這樣每次登錄后,在命令提示符后面輸入函數(shù)名字就可以立即調(diào)用

#!/bin/bash function xue(){read -p "請(qǐng)輸入第一個(gè)整數(shù)" naread -p "請(qǐng)輸入第二個(gè)整數(shù)" nbname=$[$na+$nb]echo $namereturn 100 } [root@localhost ~]# vim .bashrc (局部聲明) [root@localhost ~]# source .bashrc (更新) [root@192 ~]# xue 請(qǐng)輸入第一個(gè)整數(shù)1 請(qǐng)輸入第二個(gè)整數(shù)2 3

遞歸函數(shù)

遞歸就是程序不斷調(diào)用自身,遞歸方法就是方法直接或間接調(diào)用自身的方法。自己調(diào)用自己

舉例子

列舉出/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 公共 模板 視頻 圖片 文檔 下載 音樂(lè) 桌面

shell數(shù)組

數(shù)組就是把有限個(gè)元素變量或數(shù)組用一個(gè)名字命名,然后用編號(hào)區(qū)分他們的變量的集合。這個(gè)名字成為數(shù)組名,編號(hào)成為數(shù)組下標(biāo)。組成數(shù)組的各個(gè)變量成為數(shù)組的分量,也稱(chēng)為數(shù)組的元素,有時(shí)也稱(chēng)為下標(biāo)變量。

  • 獲取數(shù)組長(zhǎng)度
  • 使用for循環(huán)獲取具體信息,使用下標(biāo)或索引標(biāo)記數(shù)組中數(shù)據(jù)的位置
  • 可以存放多種數(shù)據(jù),如:整型,長(zhǎng)整形,浮點(diǎn)型(單精度,雙精度),字符串等
  • 獲取元素長(zhǎng)度
  • 遍歷元素
  • 元素切片
  • 元素替換
  • 元素刪除
  • 數(shù)組下標(biāo)從0開(kāi)始算
  • 數(shù)組長(zhǎng)度從1開(kāi)始算
  • 定義數(shù)組

    方法1

    基本格式log 數(shù)組名=(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

    基本格式 數(shù)組名=([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:數(shù)組元素之間使用空格隔開(kāi)

    基本格式 列表名=“value0 value1 value2” 數(shù)組名=($列表名) [root@localhost ~]# list="11 22 33 44 " [root@localhost ~]# num=($list ) [root@localhost ~]# echo ${num[*] } 11 22 33 44

    方法4:

    基本格式 數(shù)組名[0]=“value” 數(shù)組名[1]=“value” 數(shù)組名[2]=“value” 例如 AAA[0]=“11” AAA[1]=“22” AAA[2]=“33” ...

    替換數(shù)組元素

    [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

    數(shù)組包括的數(shù)據(jù)類(lèi)型與數(shù)組操作

    數(shù)組只可存放數(shù)值或字符

    下標(biāo)從0開(kāi)始

    數(shù)組操作

    獲取數(shù)組長(zhǎng)度 [root@localhost ~]# A=( a b c d e) [root@localhost ~]# echo ${A[*] } a b c d e [root@localhost ~]# echo ${#A[*] } 5

    舉例(快速創(chuàng)建數(shù)組、奇數(shù)數(shù)組)

    列出1-100的數(shù),并將1-100和1-100的奇數(shù)定義為數(shù)組

    !/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

    快速創(chuàng)建一個(gè)數(shù)組,元素由用戶(hù)自己定義

    #!/bin/bash i=0 while true doread -p "是否存入元素(yes/no) " doingif [ $doing == "no" ];thenbreakfiread -p "請(qǐng)存入第$[$i+i]個(gè)元素 :" keyarr[$i]=$keylet i++done echo ${arr[*]} ~ [root@localhost ~]# sh 57.txt.sh 是否存入元素(yes/no) yes 請(qǐng)存入第0個(gè)元素 :10 是否存入元素(yes/no) yes 請(qǐng)存入第2個(gè)元素 :20 是否存入元素(yes/no) yes 請(qǐng)存入第4個(gè)元素 :30 是否存入元素(yes/no) yes 請(qǐng)存入第6個(gè)元素 :40 是否存入元素(yes/no) no 10 20 30 40

    讓70 56 45 90 80 分沒(méi)到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

    #遍歷數(shù)組,對(duì)未滿(mǎn)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

    冒泡排序法

    示意圖

    外層是輪內(nèi)層是次

    然后要交換兩個(gè)瓶子中的水,必須找一個(gè)空瓶子作為媒介,根據(jù)一定的條件就可以換過(guò)來(lái)。

    步驟過(guò)程

    對(duì)比 前面下標(biāo) 大于 后面下標(biāo) 要放到后面

    小的下標(biāo) 賦予空瓶子

    小的下標(biāo)空了,把大的賦予小的

    大的空了 瓶子里的小下標(biāo)賦予到大的里面

    [root@localhost opt]# vim arr3.sh #!/bin/bash #快速創(chuàng)建一個(gè)數(shù)組 for ((i=0;i>=0;i++)) doread -p "請(qǐng)輸入你需要定義數(shù)組元素:" num #如果輸入空字符,那么退出本次循環(huán)if [ -z $num ];thenbreak #否則把輸入的數(shù)字賦值給數(shù)組元素elsearr[$i]=$numfi done echo "你的數(shù)組是:${arr[*]}"#定義數(shù)組前一個(gè)元素 for ((i=0;i<${#arr[*]};i++)) do#定義數(shù)組后一個(gè)元素for ((a=$i+1;a<${#arr[*]};a++))do #條件判斷,如果前一個(gè)元素大于后一個(gè)元素,就交換位置,否則下一次循環(huán)if [ ${arr[$i]} -gt ${arr[$a]} ];then #交換位置temp=${arr[$i]}arr[$i]=${arr[$a]}arr[$a]=$temp #fidone done echo "你的數(shù)組升序排列為:${arr[*]}" [root@localhost opt]# sh arr3.sh 請(qǐng)輸入你需要定義數(shù)組元素:45 請(qǐng)輸入你需要定義數(shù)組元素:1 請(qǐng)輸入你需要定義數(shù)組元素:32 請(qǐng)輸入你需要定義數(shù)組元素:55 請(qǐng)輸入你需要定義數(shù)組元素:4 請(qǐng)輸入你需要定義數(shù)組元素: 你的數(shù)組是:45 1 32 55 4 你的數(shù)組升序排列為:1 4 32 45 55

    調(diào)試命令

    set命令

    set -x:開(kāi)啟調(diào)節(jié)模式
    set +x:關(guān)閉調(diào)節(jié)模式

    • [root@localhost opt]# vim arr4.sh #!/bin/bash #遍歷數(shù)組,對(duì)未滿(mǎn)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

    選項(xiàng): -n:顯示腳本錯(cuò)誤 -v:顯示腳本信息 -x:表示跟蹤腳本 [root@localhost opt]# sh -x arr1.sh arr1.sh:行5: 未預(yù)期的符號(hào) `arr1[$i]=$[$i+1]' 附近有語(yǔ)法錯(cuò)誤 arr1.sh:行5: `arr1[$i]=$[$i+1]'

    總結(jié)

    以上是生活随笔為你收集整理的shell函数与数组(了解函数,递归函数运用,了解数组,创建基数和偶数数组,冒泡排序,调试命令)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。