訂閱
糾錯
加入自媒體

Linux入門:一文幫你搞定shell編程!

2021-05-28 14:51
一口Linux
關注

六、腳本與用戶交互 操作命令行參數

1.  讀取參數

bash shell用位置參數變量(positional parameter)存儲命令行輸入的所有參數,包括程序名。其中,表示程序名,1表示第1個參數,表示第個參數,,9表示第9個參數。如果參數個數多于9個,必須如下表示變量:,{11},...

#。痓in/bash
# author:一口Linux
for((count = 1; count <= $1; count++))
do
   echo The number is $count.
done

執(zhí)行結果:

修改腳本如下:

echo $1, $2, $3, $4

執(zhí)行結果如下:

2 讀取程序名

首先想到的是利用,但是0獲取的文件名包括./以及路徑等前綴信息,如下:

echo The command entered is: $0
# 運行:./
# 輸出:The command entered is: ./14.sh

如果想僅得到文件名,而不包含./,可以使用basename命令:

name=`basename $0`
echo The command entered is: $name
# 運行:./
# 輸出:The command entered is: 14.sh
3 特殊變量$#表示命令行參數的個數:
#。痓in/bash
# author:一口Linux
params=$#
echo The number of params is: $params
for((i = 1; i <= params; i++))
do
   echo The param is: $i
done

執(zhí)行結果

如果想獲取所有的參數,當然可以利用#和循環(huán)逐個遍歷。也可以利用如下兩個特殊變量:*將所有的命令行參數看作一個整體存儲,而$@將命令行中以空格間隔的參數單獨存儲,如下:

#!/bin/bash
# author:一口Linux
count=1
for param in "$*"
do
   echo "$* parameter $count = $param"
   count=$[ $count + 1 ]
done
count=1
for param in "$@"
do
   echo "$@ parameter $count = $param"
   count=$[ $count + 1 ]
done

4 基本的讀取

read命令接受從鍵盤或文件描述符中的輸入數據,將其存儲到一個指定變量中。

選項:

-p:指定讀取值時的提示符;
-t:指定讀取值時等待的時間(秒),如果沒有在指定的時間內輸入,就不再等待了。。
-n:設置允許輸入字符的個數

參數

變量:指定讀取值的變量名

操作詳解

例1#。痓in/bash
# author:一口Linux
# testing the read option
read -p "Please enter your name: " name
echo "Hello $name."

執(zhí)行結果

例2read命令中,可以根據需要將輸入的數據保存在多個變量中,如果指定的變量比較少,那么最后一個變量將包含余下的所有輸入,如下所示:#。痓in/bash
# author:一口Linux
# testing the read option
read -p "Enter the values: " val1 val2 val3
echo "$val1"
echo "$val2"
echo "$val3"

執(zhí)行結果:

綜合例子提示用戶輸入一個正整數num,然后計算1+2+3+...+num的值;必須對num是否為正整數做判斷,不符合應當運行再次輸入

思路:

expr只能對整數進行計算,直接用expr 和一個整數計算獲取 $? 的值來判斷是否為整數在使用 expr $num1 > 0 判斷是否大于0#。痓in/bash
# author:一口Linux
while true
do
       read -p "please input a positive number: " num
       # 判斷數是否是整數
       expr $num + 1 &> /dev/null
       if [ $? -eq 0 ];then
               # 判斷這個整數是否大于0,大于0返回1
               if [ `expr $num > 0` -eq 1 ];then
                       #echo "yes,positive number"
                       # $sum沒有賦值,默認為0
                       for i in `seq 0 $num`
                       do
                               sum=`expr $sum + $i`
                       done
                       echo "1+2+3+...+$num = $sum"
                       # 執(zhí)行計算需要退出
                       exit
               fi
       fi
       echo "error,input enlegal"
       continue
done

測試:

七、關系運算符

有時候我們需要比較兩個數字的大小關系,這時候就要用到關系運算符。關系運算符只支持數值運算,不支持字符運算。

1. 知識點詳解

Shell 語言支持下面這些關系運算符:

-eq:檢測兩個數是否相等,相等返回 true。
-ne:檢測兩個數是否不相等,相等返回 true。
-gt:檢測左邊的數是否大于右邊的,如果是返回 true。
-lt:檢測左邊的數是否小于右邊的,如果是返回 true。
-ge:檢測左邊的數是否大于等于右邊的,如果是返回 true。
-le:檢測左邊的數是否小于等于右邊的,如果是返回 true。
2. 操作詳解#。痓in/bash
# author:一口Linux
a=10
b=20
if [ $a -gt $b ]
then
  echo "a great than b"
else
  echo "a not great than b"
fi

執(zhí)行結果!如下:

八、字符串運算符

 1. 知識點詳解= 比較兩個字符串是否相等
!= 比較兩個字符串是否不相等
-z 檢測字符串的長度是否為零
-n  檢測字符串的長度是否不為零
$字符名 變量是否有負值(為空),有返回True,沒有返回False
2. 操作詳解#!/bin/bash
# author:一口Linux
###本腳本主要用于字符串運算符
if [ ! $1 ]
then
   echo "第一個參數為空"
   echo "****************************************************************"
   echo "****************************************************************"
   echo "**************執(zhí)行用例的格式為:sh $0 變量1 變量2***************"
   echo "****************************************************************"
   echo "****************************************************************"
   break
else
   if [ ! $2 ]
   then
       echo "第二個參數為空"
       echo "****************************************************************"
       echo "****************************************************************"
       echo "**************執(zhí)行用例的格式為:sh $0 變量1 變量2***************"
       echo "****************************************************************"
       echo "****************************************************************"
       break
   else
       ###1、檢測兩個字符串是否相等;
       if [ $1 = $2 ]
       then
           echo "這是第一個判斷語句"
           echo "變量1等于變量2"
       else
           echo "這是第一個判斷語句"
           echo "變量1不等于變量2"
       fi
       ###2、檢測兩個字符串是否不相等;
       if [ $1 。 $2 ]
       then
           echo "這是第二個判斷語句"
           echo "變量1不等于變量2"
       else
           echo "這是第二個判斷語句"
           echo "便量1等于變量2"
       fi
       ###3、檢測字符串長度是否為0
       if [ -z $1 ]
       then
           echo "這是第三個判斷段語句"
           echo "變量1字符串長度為0"
       else
           echo "這是第三個判斷段語句"
           echo $1
       fi
       ###4、檢測字符串長度是否不為0
       if [ -n $2 ]
       then
           echo "這是第四個判斷語句"
           echo "變量2字符串長度不為0"
           echo $2
       else
           echo "這是第四個判斷語句"
           echo "變量2字符串長度為0"
       fi
       ###5、檢測字符串是否不為空
       if [ $1 ]
       then
           echo "這是第五個判斷語句"
           echo "變量1不為空"
       else
           echo "這是第五個判斷語句"
           echo "變量1為空"
       fi
   fi
fi

測試結果:

九、shell文件及目錄常用操作的幾個實例 

提取路徑的目錄和文件名提取目錄:dirname $path

提取文件名:

basename $path
批量重命名帶有空格文件function processFilePathWithSpace(){
find $1 -name "* *" | while read line
do
newFile=`echo $line | sed 's/[ ][ ]_/g'`
mv "$line" $newFile
logInfo "mv $line $newFile $?"
done

遍歷文件內容cat /tmp/text.txt | while read line
do
echo $line
done
文件不存在,則創(chuàng)建文件[ -f $logFile ] || touch $logFile
遞歸遍歷目錄function getFile(){
for file in `l(xiāng)s $1`
do
 element=$1"/"$file
    if [ -d $element ]
 then
        getFile $element
    else
        echo $element
    fi  
done

清空文件內容cat /dev/null > $filePath


<上一頁  1  2  3  
聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯(lián)系舉報。

發(fā)表評論

0條評論,0人參與

請輸入評論內容...

請輸入評論/評論長度6~500個字

您提交的評論過于頻繁,請輸入驗證碼繼續(xù)

暫無評論

暫無評論

人工智能 獵頭職位 更多
掃碼關注公眾號
OFweek人工智能網
獲取更多精彩內容
文章糾錯
x
*文字標題:
*糾錯內容:
聯(lián)系郵箱:
*驗 證 碼:

粵公網安備 44030502002758號