class9 bash編程基礎(一)

一、編程基礎

程序:指令+ 數據

程序編程風格:

過程式:以指令為中心,數據服務于指令
對象式:以數據為中心,指令服務于數據

shell 程序:提供了編程能力,解釋執行

程序的執行方式

計算機:運行二進制指令;

編程語言: 低級:匯編 高級:

編譯:高級語言--> 編譯器--> 目標代碼
        java,C#解釋:高級語言--> 解釋器--> 機器代碼
     shell, perl, python

編程基本概念

編程邏輯處理方式:

    順序執行
    循環執行
    選擇執行


shell 編程:過程式、解釋執行

  編程語言的基本結構:

        數據存儲:變量、數組
        表達式: a + b
        語句:if

編程程序語言分類

強類型:定義變量時必須指定類型、參與運算必須符合類型
 要求;調用未聲明變量會產生錯誤
   如 java,python
弱類型:無須指定類型,默認均為字符型;參與運算會自動 進行隱式類型轉換;變量無須事先定義可直接調用
   如:bash  不支持浮點數


變量命名法則:1 、不能使程序中的保留字:例如if, for;2、只能使用數字、字母及下劃線,且不能以數字開頭3 、見名知 義4 、統一命名 規則:駝峰命名法 
     (每個單詞字母大寫) 大駝峰   StudentName
     (除第一個單詞其余單詞首字母大寫)小駝峰   studentName

二、shell 腳本基礎

shell腳本是包含一些命令或聲明,并符合一定格式的文本文件

格式要求:首行shebang 機制

#!/bin/bash#!/usr/bin/python#!/usr/bin/perl

shell 腳本的用途有:

自動化常用命令
執行系統管理和故障排除
創建簡單的應用程序
處理文本或文件

創建shell 腳本

第一步:使用文本編輯器來創建文本文件

第一行必須包括shell 聲明序列:#!
    #!/bin/bash添加注釋
   注釋以# 開頭

第二步:運行腳本

給予執行權限,在命令行上指定腳本的絕對或相對路徑


直接運行解釋器,將腳本作為解釋器程序的參數運行

shell 腳本范例

#!/bin/bash#author: wang
#Version: 1.0
#Description:This script displays some informationabout your
# environmentecho "Greetings. The date and time are $(date)"echo "Your working directory is: $(pwd)"

腳本調試

bash -n /path/to/some_script
       檢測腳本中的語法錯誤
       
bash -x /path/to/some_script
        調試執行


三、變量

變量:命名的內存空間

   數據存儲方式:
       字符:
        數值:整型,浮點型
        
變量:變量類型

        作用:        
            1 、數據存儲格式        
            2 、參與的運算        
            3 、表示的數據范圍
         類型:
        字符
        數值:整型、浮點型

bash 中變量的種類

根據變量的生效范圍等標準:
    
    本地變量:生效范圍為==當前shell進程==;對當前shell 之外的其它shell 進程,包括當前shell 的子shell 進程均無效
    環境變量:生效范圍為當前shell 進程及其子進程
    局部變量:生效范圍為當前shell 進程中某代碼片斷(通常指函數)
    位置變量:$1, $2, ...來表示,用于讓腳本在腳本代碼中調用通過命令行傳遞給它的參數
    特殊變量:$?, $0, $*, $@, $#

本地變量

變量賦值:name=‘value’, 
可以使用引用value:
(1)  可以是直接字串; name=“root"
(2)  變量引用:name="$USER"
(3)  命令引用:name=` COMMAND `, name =$(COMMAND)

變量引用:${name}, $name"" :弱引用,其中的變量引用會被替換為變量值'':強引用,其中的變量引用不會被替換為變量值,而保持原字符串

顯示已定義的所有變量:set刪除變量:unset name

環境變量

變量聲明、賦值:
    export name=VALUE    declare -x name=VALUE
    變量引用:$name, ${name}
[root@6 bin]# a=1
[root@6 bin]# b=2
[root@6 bin]# ab=34
[root@6 bin]# echo $ab
34
[root@6 bin]# echo ${a}b
1b
顯示所有環境變量: 
   
    export     printenv      變量相同
    env
    
    
刪除:unset namebash有許多內建的環境變量:PATH, SHELL, USRE,UID,HISTSIZE, HOME, PWD, OLDPWD, HISTFILE, PS1
[root@7 ~]# export num=123
[root@7 ~]# echo $[$num+123]
246
[root@7 ~]# declare -x num2=123
[root@7 ~]# echo $[$num+$num2]
246

只讀和位置變量

只讀變量:只能聲時,但不能修改和刪除   
     readonly name    declare -r name     定義常量
     declare -xr  name 環境常量
   [root@6 bin]# readonly num=1
   [root@6 bin]# num=2
    -bash: num: readonly variable
   [root@6 bin]# unset num
    -bash: unset: num: cannot unset: readonly variable
           
位置變量:在腳本代碼中調用通過命令行傳遞給腳本的參數    
        $1, $2, ... :對應第1 、第2 等參數,    
         shift [n] 換位置    $0:  命令本身
         
    $*: 傳遞給腳本的所有參數,全部參數合為一個字符串    
    $@: 傳遞給腳本的所有參數,每個參數為獨立字符串   
    $#:  傳遞給腳本的參數的個數       
    $@ $*  ==只在被雙引號包起來的時候才會有差異==
        
示例:判斷給出的文件的行數
    linecount="$(wc -l $1| cut -d' ' -f1)"
    echo "$1 has $linecount lines."


四、算術運算

bash 中的算術運算:help let
    +, -, *, /, % 取模(取余), ** (乘方)
 實現算術運算:
    (1) let var= 算術表達式
    (2) var=$[ 算術表達式]
    (3) var=$(( 算術表達式))
    (4) var=$(expr arg1 arg2 arg3 ...)
    
          expr 0 + x    判斷x是否為整數
          expr 1 \* 2    1*2   *需要轉義字符
          
    (5) declare –i var =  數值
    (6) echo ‘ 算術表達式’ | bc
乘法符號有些場景中需要轉義 ,如 如*

bash 有內建的隨機數生成器:$RANDOM (1-32767) )
     echo $[$RANDOM%50]  :0-49 之間隨機數

賦值

增強型賦值:
     +=, -=, *=, /=, %=  let varOPERvalue
       例如:let count+=3
       自加3 后自賦值
  自增,自減:        let var+=1
        let var++        let var-=1
        let var--
[root@6 bin]# a=10
[root@6 bin]# b=10
[root@6 bin]# let c=a++
[root@6 bin]# let d=++b
[root@6 bin]# echo $c $d
10 11

邏輯運算

true, false
  1, 0與:    1 與 與 1 = 1
    1 與 與 0 = 0
    0 與 與 1 = 0
    0 與 與 0 = 0
    或:    1 或 或 1 = 1
    1 或 或 0 = 1
    0 或 或 1 = 1
    0 或 或 0 = 0

邏輯運算

非:!
        ! 1 = 0
        ! 0 = 1短路運算:
    短路與:
        第一個為0 ,結果必定為0; ;
        第一個為1 ,第二個必須要參與運算;
    短路或 :
        第一個為1 ,結果必定為1; ;
        第一個為0 ,第二個必須要參與運算;
    
異或:^
    異或的兩個值, 相同為假,不同為真

聚集命令

有兩種聚集命令的方法:
    ? 復合式:date; who | wc -l
    命令會一個接一個地運行
    
    ? 子shell :(date; who | wc -l ) >>/tmp/trace
    所有的輸出都被發送給單個STDOUT 和STDERR

五、腳本狀態

退出狀態

進程使用退出狀態來報告成功或失敗
    ? 0 代表成功,1 -255 代表失敗
    ? $?  變量保存最近的命令退出狀態
    
例如:    $ ping -c1 -W1 hostdown &> /dev/null
    $ echo $?

退出狀態碼

bash 自定義退出狀態碼exit [n] :自定義退出狀態碼;
    子shell中存在錯誤退出,也可返回狀態碼 
注意:腳本中一旦遇到exit命令,腳本會立即終止;終止退出狀態取決于exit 命令后面的數字

注意:如果未給腳本指定退出狀態碼,整個腳本的退出狀態碼

取決于腳本中執行的最后一條命令的狀態碼

條件測試

判斷某需求是否滿足,需要由測試機制來實現;
專用的測試表達式需要由測試命令輔助完成測試過程;

評估布爾聲明,以便用在條件性執行中
? 若真,則返回0? 若假,則返回1測試命令:
    ? test EXPRESSION
    ? [ EXPRESSION ]
    ? [[ EXPRESSION ]]
    注意:EXPRESSION 前后必須有空白字符

條件性的執行操作符

根據退出狀態而定,命令可以有條件地運行
    ? &&  代表條件性的AND THEN
    ? || 代表條件性的OR ELSE例如:
    $ grep -q no_such_user /etc/passwd \
    || echo 'No such user'
    No such user
    $ ping -c1 -W2 station1 &> /dev/null \
    > && echo "station1 is up" \
    > || (echo 'station1 is unreachable'; exit 1)
    station1 is up

test 命令

長格式的例子:
$ test "$A" == "$B" && echo "Strings are equal"$ test “$A” -eq “$B” \&& echo "Integers are equal"簡寫格式的例子:
$ [ "$A" == "$B" ] && echo "Strings are equal"$ [ "$A" -eq "$B" ] && echo "Integers are equal"

bash 的測試類型

數值測試:
    -gt:  是否大于;   
    -ge:  是否大于等于;    
    -eq:  是否等于;   
    -ne:  是否不等于;  
    -lt:  是否小于;   
    -le:  是否小于等于;

bash 的測試類型

字符串測試:
== :是否等于;>: ascii 碼是否大于ascii碼 碼
<:  是否小于
!=:  是否不等于=~:  左側字符串是否能夠被右側的PATTERN所匹配
注意:  此表達式一般用于[[ ]] 中;

-z "STRING":字符串是否為空,空為真,不空為假
-n "STRING":字符串是否不空,不空為真,空為假

注意:用于字符串比較時的用到的操作數都應該使用引號
[root@6 bin]# [[ abc =~ * ]]
[root@6 bin]# echo $?
2
[root@6 bin]# [[ abc =~ .* ]]
[root@6 bin]# echo $?
0
[root@6 bin]# [[ abc =~ a.. ]]
[root@6 bin]# echo $?
0

文件測試

存在性測試
-a FILE :同-e
-e FILE: 文件存在性測試,存在為真,否則為假;存在性及類別測試
-b FILE :是否存在且為塊設備文件;
-c FILE :是否存在且為字符設備文件;
-d FILE :是否存在且為目錄文件;
-f FILE :是否存在且為普通文件;
-h FILE  或 -L FILE :存在且為符號鏈接文件;
-p FILE :是否存在且為命名管道文件;
-S FILE :是否存在且為套接字文件;

文件權限測試:

-r FILE :是否存在且可讀 
-w FILE:  是否存在且可寫
-x FILE:  是否存在且可執行
[root@6 ~]# [ -r a ]
[root@6 ~]# echo $?
0
[root@6 ~]# [ -w a ]
[root@6 ~]# echo $?
0
[root@6 ~]# [ -rw a ]
-bash: [: -rw: unary operator expected
[root@6 ~]# test -rw a
-bash: test: -rw: unary operator expected
[root@6 ~]# test -w a
[root@6 ~]# echo $?
0

文件特殊權限測試:

-g FILE :是否存在且擁有sgid 權限;
-u FILE :是否存在且擁有suid 權限;
-k FILE :是否存在且擁有sticky 權限;

文件大小測試:

-s FILE:  是否存在且非空;

文件是否打開:

-t fd: fd表示文件描述符是否已經打開且與某終端相關
-N FILE:文件自動上一次被讀取之后是否被修改過-O FILE :當前有效用戶是否為文件屬主
-G FILE :當前有效用戶是否為文件屬組

雙目測試:

FILE1 -ef FILE2: FILE1與FILE2 是否指向同一個設
備上的相同inode
FILE1 -nt FILE2: FILE1 是否新于FILE2; 
FILE1 -ot FILE2: FILE1 是否舊于FILE2;

組合測試條件

第一種方式:

COMMAND1 && COMMAND2  并且
COMMAND1 || COMMAND2  或者
! COMMAND 非 

 如:[ -e FILE ] && [ -r FILE ]

第二種方式:

EXPRESSION1 -a EXPRESSION2  并且
EXPRESSION1 -o EXPRESSION2  或者
! EXPRESSION
必須使用測試命令進行;
# [ -z “$HOSTNAME” -o $HOSTNAME "==\    "localhost.localdomain" ] && hostname www.magedu.com# [ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab

bash位置變量參數

   前面講過位置參數變量實際是屬于系統預定義變量的一種,同樣不能修改變量名,作用也是固定的,也不能新增變量。只能修改變量的值。

   我們來看看下面常用的位置參數變量。

     1、$n:n代表數字,$0代表命令本身,$1-$9代表第一到第九個參數,十以上的參數需要用大括號括起來,比如${11}.

     2、$*:這個變量代表命令行中所有的參數,$*把所有的參數看成一個整體。

     3、$@:這個變量也代表命令行中所有的參數,不過$@把每個參數區分對待。

     4、$#:這個變量代表命令行中所有參數的個數。

[root@6 ~]# /root/a.sh 1 2 3 4
4
數值=3
輸入的參數=1 2 3 4
輸入的參數=1 2 3 4
#! /bin/bash
echo "$#"
num=$[$1+$2]
echo "數值=$num"
echo "輸入的參數=$*"
echo "輸入的參數=$@"

     5、$@與 $*的區別

       他們的區別就是$*會把所有變量看成一個整體。

       $@會把傳給他的所有變量分開來看待,

       通過一個腳本test.sh來說明,

[root@6 ~]# vim test.sh
#!/bin/bash
  a=1
  b=1
 for x in  "$*"
#$*會把傳給他的每個參數看成是一個整體,所以只會循環一次
  do
     do
       echo "The parameters $a is :$x"
     a=$(($a+1))
     done
 for y in "$@"
#$@會把傳給他的每個參數都看成是獨立的,所以”$@”中有幾個參數,就會循環幾次。
  do
    echo “The parameters $b is: $y”
     b=$(($b+1))
  done
[root@6 ~]# /root/test.sh  1 2 3 4
The parameters 1 is :1 2 3 4
The parameters 1 is: 1
The parameters 2 is: 2
The parameters 3 is: 3
The parameters 4 is: 4

        

一、作業:

1、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小。

[root@6 bin]# /root/bin/systeminfo.sh
主機名:6.localdomain
IPV4地址:  10.1.252.177
操作系統版本:CentOS release 6.8 (Final)
內核版本:2.6.32-642.el6.x86_64
CPU型號: Intel(R) Core(TM) i5-3230M CPU @ 2.60GHz
內存容量:1004136 kB
硬盤大小: 128.8 GB
#! /bin/bash
#,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤
大小
echo "主機名:`hostname`"
echo "IPV4地址: `ip addr|sed -nr '/inet.*brd/p'|sed -r 's@inet\ +(.*)/.*@\1@'|tr -s ' '`"
echo "操作系統版本:`cat /etc/centos-release`"
echo "內核版本:`uname -r`"
echo "CPU型號: `lscpu|sed -nr '/Model\ name/p'|sed -r 's/^.*\ +(In.*$)/\1/'`"
echo "內存容量:` cat /proc/meminfo|sed -nr 's/MemTotal\:\ +(.*$)/\1/p'`"
echo "硬盤大?。篳fdisk -l|sed -rn 's/Di.*:(.*)\,.*/\1/p'`"

2、編寫腳本/root/bin/backup.sh,可實現每日將/etc/目錄備份到/root/etcYYYY-mm-dd中

[root@6 bin]# /root/bin/backup.sh
It is successful.
[root@6 bin]# ls /root
anaconda-ks.cfg  checkdisk.sh   install.log         公共的  圖片  音樂
bin              etc2016-08-11  install.log.syslog  模板    文檔  桌面
cat              etc2016-08-12  sumid.sh            視頻    下載
#! /bin/bash
#/etc/目錄備份到/root/etcYYYY-mm-dd中
cp -a /etc /root/etc`date +%F`
if [ $? -eq 0 ];then
 echo "It is successful."
else echo "ERROR."
fi

3、編寫腳本/root/bin/disk.sh,顯示當前硬盤分區中空間利用率最大的值

[root@6 bin]# /root/bin/disk.sh
The max-disk useage is 19
#! /bin/bash
#顯示當前硬盤分區中空間利用率最大的值
useage=$(df|sed -nr '/.*sd/p'|sed -nr 's/.*\ +([0-9]+)%.*/\1/p'|sort -unr |head -1)
echo "The max-disk useage is $useage "

4、編寫腳本/root/bin/links.sh,顯示正連接本主機的每個遠程主機的IPv4地址和連接數,并按連接數從大到小排序

[root@6 bin]# /root/bin/links.sh
遠程主機連接數和地址:      2 10.1.250.77
#! /bin/bash
#顯示正連接本主機的每個遠程主機的IPv4地址和連接數,并按連接數從大到小排序
links=$(netstat -nt|sed -nr '/tcp.*/p'|tr -s ' ' ':'|cut -d: -f6|sort -nr|uniq -c)
echo "遠程主機連接數和地址:$links"
unset links

5、寫一個腳本/root/bin/sumid.sh,計算/etc/passwd文件中的第10個用戶和第20用戶的ID之和

[root@6 bin]# /root/bin/sumid.sh
/etc/passwd文件中的第10個用戶和第20用戶的ID之和=180
#! /bin/bash
#計算/etc/passwd文件中的第10個用戶和第20用戶的ID之和
uid10=$(sed -n '10p' /etc/passwd|cut -d: -f3)
uid20=$(sed -n '20p' /etc/passwd|cut -d: -f3)
sumid=$[$uid10+$uid20]
echo "/etc/passwd文件中的第10個用戶和第20用戶的ID之和=$sumid"
unset uid10
unset uid20

6、寫一個腳本/root/bin/sumspace.sh,傳遞兩個文件路徑作為參數給腳本,計算這兩個文件中所有空白行之和

[root@6 bin]# /root/bin/sumspace.sh /root/a  /root/b
兩個文件中所有空白行之和=7
#! /bin/bash
#計算這兩個文件中所有空白行之和
File1=$(grep '^$' $1|wc -l)
File2=$(grep '^$' $2|wc -l)
FilesSpace=$(($File1+$File2))
echo "兩個文件中所有空白行之和=$FilesSpace"
unset File1
unset File2
unset FilesSpace

7、寫一個腳本/root/bin/sumfile.sh,統計/etc, /var, /usr目錄中共有多少個一級子目錄和文件

[root@6 bin]# /root/bin/sumfile.sh
/etc, /var, /usr目錄中共有290個一級子目錄和文件.
#! /bin/bash
#統計/etc, /var, /usr目錄中共有多少個一級子目錄和文件
etc=$[$(ls -lA /etc|wc -l)-1]
var=$[$(ls -lA /var|wc -l)-1]
usr=$[$(ls -lA /usr|wc -l)-1]
Files=$(($etc+$var+$usr))
echo "/etc, /var, /usr目錄中共有$Files個一級子目錄和文件."
unset ect
unset var
unset usr

8、寫一個腳本/root/bin/argsnum.sh,接受一個文件路徑作為參數;如果參數個數小于1,則提示用戶“至少應該給一個參數”,并立即退出;如果參數個數不小于1,則顯示第一個參數所指向的文件中的空白行數

[root@6 bin]# /root/bin/argsnum.sh /root/a root/b
第一個文件中的空白行數=3.
[root@6 bin]# /root/bin/argsnum.sh /root/b root/a
第一個文件中的空白行數=4.
[root@6 bin]# /root/bin/argsnum.sh /root/b
第一個文件中的空白行數=4.
[root@6 bin]# /root/bin/argsnum.sh
至少應該給一個參數
#! /bin/bash
#接受一個文件路徑作為參數;如果參數個數小于1,則提示用戶“至少應該給一個參數”,并立即退出;>
如果參數個數不小于1,則顯示第一個參數所指向的文件中的空白行數
[ $# -le 1 ] &&[ $# -ne 1 ]&& echo "至少應該給一個參數" && exit||spaceline=$( grep '^$' $1 |w
c -l )
echo "第一個文件中的空白行數=$spaceline."

9、寫一個腳本/root/bin/hostping.sh,接受一個主機的IPv4地址做為參數,測試是否可連通。如果能ping通,則提示用戶“該IP地址可訪問”;如果不可ping通,則提示用戶“該IP地址不可訪問”

[root@6 bin]# /root/bin/hostping.sh 10.1.252.180
該IP地址可訪問.
[root@6 bin]# /root/bin/hostping.sh 10.1.252.167
該IP地址不可訪問.
#! /bin/bash
#接受一個主機的IPv4地址做為參數,測試是否可連通。如果能ping通,則提示用戶“該IP地址可訪問”;如果不可ping通,則提示用戶“該IP地址不可訪問”
ping -c1 -w1 $1 &> /dev/null && echo "該IP地址可訪問."||echo "該IP地址不可訪問."

10、chmod -rw /tmp/file1,編寫腳本/root/bin/per.sh,判斷當前用戶對/tmp/fiile1文件是否不可讀且不可寫

[lvasu@6 tmp]$ chmod a-rw file1
[lvasu@6 tmp]$ /tmp/per.sh
文件不可讀且不可寫.
[lvasu@6 tmp]$ /tmp/per.sh
文件可讀且可寫.
[root@6 ~]# chmod a+rw /tmp/file1     #權限判斷以實際權限為準,即使取消root權限,但是root用戶仍然有權限
[root@6 bin]# /root/bin/per.sh
文件可讀且可寫.
[root@6 ~]# chmod a-rw /tmp/file1
[root@6 bin]# /root/bin/per.sh
文件可讀且可寫.
#! /bin/bash
#判斷當前用戶對/tmp/fiile1文件是否不可讀且不可寫
[ -r /tmp/file1  -a -w /tmp/file1 ]
[ $? -eq 0 ] && echo "文件可讀且可寫." || echo "文件不可讀且不可寫."
#! /bin/bash
#判斷當前用戶對/tmp/fiile1文件是否不可讀且不可寫
[ ! -r /tmp/file1  -a ! -w /tmp/file1 ]
[ $? -ne 0 ] && echo "文件可讀且可寫." || echo "文件不可讀且不可寫."

11、編寫腳本/root/bin/nologin.sh和login.sh,實現禁止和充許普通用戶登錄系統。

[root@6 bin]# /root/bin/nologin.sh
禁止普通用戶登錄系統centos6
#! /bin/bash
#禁止普通用戶登錄系統
num=$(sed -nr 's/.*release\ ([0-9])..*/\1/p' /etc/centos-release)
[ $num -eq 6 ] &&  touch /etc/nologin && echo "禁止普通用戶登錄系統centos6"
[ $num -eq 7 ] &&  touch /run/nologin && echo "禁止普通用戶登錄系統centos7"
[root@6 bin]# /root/bin/login.sh
允許普通用戶登錄系統centos6
#! /bin/bash
#允許普通用戶登錄系統
num=$(sed -nr 's/.*release\ ([0-9])..*/\1/p' /etc/centos-release)
[ $num -eq 6 ] &&  rm -f /etc/nologin && echo "允許普通用戶登錄系統centos6"
[ $num -eq 7 ] &&  rm -f /run/nologin && echo "允許普通用戶登錄系統centos7"

12、寫一個腳本/root/bin/hostping.sh,接受一個主機的IPv4地址做為參數,先判斷是否合格IP,否,提示IP格式不合法并退出,是,測試是否可連通。如果能ping通,則提示用戶“該IP地址可訪問”;如果不可ping通,則提示用戶“該IP地址不可訪問”

[root@6 bin]# /root/bin/hostping.sh  255.255.255.255
此IP地址不合法.
[root@6 bin]# /root/bin/hostping.sh  10.1.252.180
該IP地址可訪問.
[root@6 bin]# /root/bin/hostping.sh  10.1.252.167
該IP地址不可訪問.
#! /bin/bash
#接受一個主機的IPv4地址做為參數,測試是否可連通。如果能ping通,則提示用戶“該IP地址可訪問”如果不可ping通,則提示用戶“該IP地址不可訪問”
echo $1 |egrep -o '(\b([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\b\.){3}\b([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\b' &> /dev/null
[ $? -eq 0 ] && (ping -c1 -w1 $1 &> /dev/null && echo "該IP地址可訪問."||echo "該IP地址不可訪問.") || echo "此IP地址不合法."  && exit

13、計算1+2+3+…+100的值  sum1.sh

[root@6 bin]# /root/bin/sum.sh
1+2+3+...+100的值=5050
#! /bin/bash
#計算1+2+3+...+100的值
num=$(echo {1..100}|tr ' ' '+')
sum=$[$num]
echo "1+2+3+...+100的值=$sum"
unset num
unset sum

14、計算從腳本第一參數A開始,到第二個參數B的所有數字的總和,判斷B是否大于A,否提示錯誤并退出,是則計算之  sun2.sh

[root@6 bin]# /root/bin/sum2.sh 1 2
兩個參數的和=3
[root@6 bin]# /root/bin/sum2.sh 2 1
ERROR
#! /bin/bash
#計算從腳本第一參數A開始,到第二個參數B的所有數字的總和,判斷B是否大于A,否提示錯誤并退出,是
則計算之
[ $2 -lt  $1 ]
[ $? -eq  0 ]&& sum=$[$1+$2] && echo "兩個參數的和=$sum" || echo "ERROR" && exit

原創文章,作者:lvasu,如若轉載,請注明出處:http://www.www58058.com/34319

(0)
lvasulvasu
上一篇 2016-08-15 09:24
下一篇 2016-08-15 09:24

相關推薦

  • Linux命令的別名與管道命令的詳解

    Linux中命令的別名與管道命令的詳解 命令別名 在使用和維護liunx時,將會使用大量的命令,而一些命令加上參數時輸入比較繁瑣,此時我們可以定義一個別名來代替繁瑣的命令。 系統定義的別名 可以輸入 alias 命令查看系統中已經定義好的命令的別名; [root@localhost ~]# alias alias cp=’cp -i’ alias egrep…

    Linux干貨 2018-03-03
  • 實驗:yum、編譯安裝、swap

    實驗:在centos7實現光盤yum源 1yum install autofs 2現在啟動systemctl start autofs 3開機啟動systemctl enable autofs 4 cat /etc/yum.repos.d/base.repo[centos7]name=centos7 repobaseurl=file:///misc/cdgp…

    Linux干貨 2017-04-25
  • 用戶和組——Linux基本命令(10)

    1.     用戶和組的配置文件 Linux用戶和組的主要配置文件: /etc/passwd:用戶及其屬性信息(名稱、UID、主組ID等) /etc/group:組及其屬性信息 /etc/shadow:用戶密碼及其相關屬性 /etc/gshadow:組密碼及其相關屬性   2. /etc/passwd 在Li…

    2017-07-22
  • 馬哥教育首屆IT技術博客大賽–復審階段

    馬哥教育首屆IT博客大賽大眾評審開始了 2016年馬哥教育首屆IT博客技術大賽,評委初審已結束,正式進入大眾評審階段。。。。 此次博客大賽,雖然因為準備時間比較倉促,舉辦經驗略有不足(快去鄙視小編~&#x1f612;),但還是收到了10多位優秀的小伙伴共80篇博文(看看人家的勁頭,這就是差距呀&#x1f613;)的參賽作品投遞; 其中初審最高…

    Linux干貨 2016-06-07
  • Linux的安全控制訪問模塊之SElinux

    SElinux   1、Selinux介紹:Linux的一個強制訪問控制安全模塊,2000年以GNU GPL發布,Linux內核2.6版本集成在內核中。 DAC:自由訪問控制,進程是無束縛的。 MAC:強制訪問控制,策略的規則決定控制的嚴格程度(策略被用來定義被限制的進程能夠使用那些資源[文件和端口]);進程的可以被限制的;默認情況下,沒有允許的行…

    Linux干貨 2016-09-19
  • N26-博客作業-week13

    1、建立samba共享,共享目錄為/data,要求:(描述完整的過程)  1)共享名為shared,工作組為magedu;  2)添加組develop,添加用戶gentoo,centos和ubuntu,其中gentoo和centos以develop為附加組,ubuntu不屬于develop組;密碼均為用戶名;  3)添加samb…

    Linux干貨 2017-06-15

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-15 17:30

    總結的很詳細,再接再厲

欧美性久久久久