shell編程基礎

第1章 shell編程基礎

1.1 書寫腳本

/server/scripts

#!/bin/bash   

get ip address

ip=`hostname -I|awk '{print $1}'`

 

mkdir && backup

mkdir -p /backup/$ip

tar zcf /backup/$ip/etc-`date  +%F`.tar.gz   /etc/

1.2  變量

1.2.1 什麼是變量?

x + y = 10    x=20  y=?  未知數(變量)

1.2.2 變量命名規則:

不能以數字開頭

1.2.3 賦值(把數據存放在變量中)

[root@oldboyedu50-lnb /server/scripts]# ip=10.0.0.200

[root@oldboyedu50-lnb /server/scripts]# echo $ip

10.0.0.200

1.3 變量分類:

1.3.1 普通變量(局部變量)

1.3.2 環境變量(全局變量)

1.大寫

2.系統定義的

3.在大部分地方可以使用

PATH  PS1  LANG

實例1-1              env結果的第1

awk

env |awk -F= '{print $1}'

sed

env |sed 's#=.*##g'

grep

env|egrep '^[A-Z0-9_]+' -o

env|egrep '^[^=]+'

1.4 全局變量與局部變量區別

[root@oldboyedu50-lnb /server/scripts]# unset OLDBOY

[root@oldboyedu50-lnb /server/scripts]# env  |grep OLDBOY

[root@oldboyedu50-lnb /server/scripts]# OLDBOY=10

[root@oldboyedu50-lnb /server/scripts]# echo $OLDBOY

10

[root@oldboyedu50-lnb /server/scripts]# cat show.sh

echo $OLDBOY

[root@oldboyedu50-lnb /server/scripts]# sh show.sh

[root@oldboyedu50-lnb /server/scripts]# source  show.sh

10

[root@oldboyedu50-lnb /server/scripts]# .   show.sh

10

1.5 特殊變量:(重點)

[root@oldboyedu50-lnb /server/scripts]# week=6

[root@oldboyedu50-lnb /server/scripts]# echo $week

6

[root@oldboyedu50-lnb /server/scripts]# echo $weekday

6day

實例1-2              書寫一個計算器 加減乘除

變量中 把兩個數字放在變量中

[root@oldboyedu50-lnb /server/scripts]# n1=10

[root@oldboyedu50-lnb /server/scripts]# n2=20

[root@oldboyedu50-lnb /server/scripts]# awk  'BEGIN{print n1/n2}'

awk: fatal: division by zero attempted

命令行中的變量 放在awk中使用

[root@oldboyedu50-lnb /server/scripts]# awk  'BEGIN{print n1,n2}'

 [root@oldboyedu50-lnb /server/scripts]# awk -vnum1=10  'BEGIN{print num1 }'

10

[root@oldboyedu50-lnb /server/scripts]# awk -vnum1=10  -vnum2=20 'BEGIN{print num1/num2 }'

0.5

實例1-3              書寫腳本計算1020的加減乘除

cal.sh

#!/bin/bash

n1=10

n2=30

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1+num2 }'

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1-num2 }'

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1*num2 }'

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1/num2 }'

1.5.2 vim批量操作

1.進入批量編輯模式(可視塊)

2.選擇 批量增加的範圍

3. shift + i 進行修改

4.esc 退出等等

1.6 特殊符號:

$1 $2  $數字  awk:第1列 第2列 第3列

              shell腳本:第1個參數

$0            awk:整行

              shell腳本:文件名

$#           判斷腳本的參數個數

$?           上一個命令的執行結果(返回值)

0            執行正確

非0          執行失敗

 

[root@oldboyedu50-lnb /server/scripts]# cat  cal.sh

#!/bin/bash

 

n1=$1

n2=$2

 

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1+num2 }'

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1-num2 }'

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1*num2 }'

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1/num2 }'

[root@oldboyedu50-lnb /server/scripts]# sh cal.sh 10 20

30

-10

200

0.5

實例1-4              cal-read.sh 通過read命令實現 n1 n2賦值

#!/bin/bash

 

read -p "input num1,num2:" n1 n2

 

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1+num2 }'

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1-num2 }'

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1*num2 }'

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1/num2 }'

 

 

 

 

 

1.7 判斷 if

1.7.1 如果/oldboy 目錄存在 顯示 /oldboy dir exist

# ls /oldboy/ && echo  dir exist

1.7.2 如果/oldboy 不存在   則創建這個目錄

[root@oldboyedu50-lnb /oldboy]# cd /oldboya/  || mkdir -p /oldboya

-bash: cd: /oldboya/: No such file or directory

[root@oldboyedu50-lnb /oldboy]# ll -d /oldboya/

drwxr-xr-x 2 root root 4096 Aug 17 12:16 /oldboya/

實例1-5              判斷文件目錄是否存在

[root@oldboyedu50-lnb /oldboy]# [ -d /oldboy ] && echo dir exist

dir exist

[root@oldboyedu50-lnb /oldboy]# [ -d /oldboy ] || mkdir -p /oldboy

條件表達式:

-eq         equal         ==

-ne     not equal         !=

-gt     great than        >

-ge     great equal       >=

-lt     less  than        <

-le     less  equal       <=

1.7.3 命令是否執行正確

[root@oldboyedu50-lnb /oldboy]# [ 10 -eq 10 ]

[root@oldboyedu50-lnb /oldboy]# echo $?

0

[root@oldboyedu50-lnb /oldboy]# [ 10 -gt 10 ]

[root@oldboyedu50-lnb /oldboy]# echo $?

1

[root@oldboyedu50-lnb /oldboy]# [ 10 -ge 10 ]

[root@oldboyedu50-lnb /oldboy]# echo $?

0

[root@oldboyedu50-lnb /oldboy]# [ -d /oldboy ]

[root@oldboyedu50-lnb /oldboy]# echo $?

0

[root@oldboyedu50-lnb /oldboy]# [ -d /oldboyaaa ]

[root@oldboyedu50-lnb /oldboy]# echo $?

1

實例1-6              判斷腳本的參數個數,如果不是2則提示請輸入兩個數字

[root@oldboyedu50-lnb /server/scripts]# cat pan.sh

#!/bin/bash

if [ $# -ne 2 ];then

   echo "輸入兩個數字"

fi

實例1-7            給計算器(參數傳遞)增加一個條件,判斷腳本的參數個數,如果不是2則,提示請輸入兩個數字

[root@oldboyedu50-lnb /server/scripts]# cat cal.sh

#!/bin/bash

 

n1=$1

n2=$2

 

if [ $# -ne 2 ];then

   echo "USAGE: $0 num1 num2"

   exit

fi

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1+num2 }'

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1-num2 }'

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1*num2 }'

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1/num2 }'

 

[root@oldboyedu50-lnb /server/scripts]# sh  cal.sh

USAGE: cal.sh num1 num2

[root@oldboyedu50-lnb /server/scripts]# sh  cal.sh 120 20

140

100

2400

6

實例1-8              comp.sh輸入兩個數字:

1.如果n1大於n2

n1 > n2

2.如果n1不大於n2

n1 <= n2

[root@oldboyedu50-lnb /server/scripts]# cat  comp.sh

#!/bin/bash

 

n1=$1

n2=$2

 

if [ $n1 -gt $n2 ];then

   echo "$n1 > $n2"

else

   echo "$n1 <= $n2"

fi

[root@oldboyedu50-lnb /server/scripts]# sh comp.sh 10 20

10 <= 20

[root@oldboyedu50-lnb /server/scripts]# sh comp.sh 10 10

10 <= 10

[root@oldboyedu50-lnb /server/scripts]# sh comp.sh 100 10

100 > 10


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章