第三部分shell編程3(shell腳本編寫1)

作監控和備份最多shell

1. shell腳本是什麼
它是一種腳本語言,並不是編程語言
可使用一些邏輯判斷、循環等語法
能夠自定義子函數
是系統命令的集合
shell腳本能夠實現自動化運維,大大增長咱們的工做效率編程

第一個shell腳本:
mkdir shell
cd shell/
vim 1.sh
`
`#! /bin/bash
`#This is a test shell script
`
`echo "123456."
`touch aming.111
`datevim

2. shell腳本結構以及執行方法
開頭行指定bash路徑: #! /bin/bash
以#開頭的行做爲解釋說明
腳本的名字以.sh結尾,用於區分這是一個shell腳本
執行方式有兩種:chmod +x 1.sh; ./1.sh
若是沒有執行權限能夠 bash 1.sh
也能夠 sh 1.sh 能夠查看ls -l /bin/shbash

bash -x 1.sh 能夠查看腳本執行過程less


cal 輸出日曆的
cal -y 輸出全年的日曆運維

LANG=en編程語言

3. 學會date命令的用法
date +%Y-%m-%d, date +%y-%m-%d ,date +%F 年月日
date +%H:%M:%S = date +%T 時間函數


date +%s 時間戳
date -d "+1day"一天後
date -d "-1day"一天前
date -d "-1day" +%F 一天前的日期是多少
date -d "-1month" 一月前spa

date -d "-1hour" 一小時前
date -d "-1hour" +%T 一小時前的時間是多少,下面幾個同樣日誌

date -d 「-1min」 一分鐘前
date -d 「-1sec」 一秒前
date +%w, 星期 date +%W 一年的第幾周,一年有52個周

把運行這個腳本的時間去生成一個日誌,保存在tmp目錄下
vim 2.sh
#! /bin/bash
d=`date +%T`
logname=$d.log
touch /tmp/$logname

執行就tmp就有這個日誌了

 

 

bc 是計算器
一種是直接輸入運輸
一種 echo "365/7" |bc

4. shell腳本中的變量
當腳本中使用某個字符串較頻繁而且字符串長度很長時就應該使用變量代替
使用條件語句時,變量是必不可少的
引用某個命令的結果時,用變量替代
寫和用戶交互的腳本時,變量也是必不可少的
內置變量 $0, $1, $2…
數學運算a=1;b=2; c=$(($a+$b))或者$[$a+$b]

echo "scale=2;5/2"|bc 輸出的是2.50

vim 3.sh
#! /bin/bash
read -p "Pleaswe input Number" n
echo $n

========
read -t 3 -p "Pleaswe input Number" n t就是超時時間
===============

vim 4.sh
#! /bin/bash
echo $0
echo $1
echo $2

輸入參數的時候$0輸出的是自己4.sh

vim 5.sh
#! /bin/bash
n1=0
while :; :表示真的意思,也能夠是1
do
read -p "please inpty a number :" n
m=`echo $n |sed 's/[0-9]//g'` m就是把數字所有刪除掉而後判斷是否是爲空
l=`echo $m|wc -c` 若是是純數字的話那確定是空的,l若是不等
if [ $l !="1" ]; then 1就不是空的,確定包含數字或者是純字母
echo "the charater you input is not a number."
n1=`echo "$n1+1"|bc` l若是不等1就給他記錄一次
else
echo "your number is $n" 若是是純數字說明是空的就輸出,而後退出
exit 0
fi
if [ $n1 == "5" ];then 若是輸入的不是數字超過5次就退出
exit 1
fi
done

 

--------------
a=
echo $a |wc -c c是有幾個字符串
輸出的是1表明空字符,由於他有一個換行符

echo "12345a" |sed 's/[0-9]//g' 這裏輸出是a

echo "12345" |sed 's/[0-9]//g' 這裏輸出是空的
------------
5. shell中的邏輯判斷
格式1:if 條件 ; then 語句; fi
格式2:if 條件; then 語句; else 語句; fi
格式3:if …; then … ;elif …; then …; else …; fi
邏輯判斷表達式:if [ $a -gt $b ]; if [ $a -lt 5 ]; if [ $b -eq 10 ]等

-gt (>); -lt(<); -ge(>=); -le(<=);-eq(==); -ne(!=) 注意處處都是空格
可使用 && || 結合多個條件
n=5
if [ $n -gt 2 ] && [ $n -lt 10 ]; then echo ok; else echo nook;fi
=
if [ $n -gt 2 -a $n -lt 1 ]; then echo ok; else echo nook;fi

-a 是與的意思
=========================
if [ $n -gt 2 ] || [ $n -lt 1 ]; then echo ok; else echo nook;fi
=
if [ $n -gt 2 -o $n -lt 1 ]; then echo ok; else echo nook;fi

-o 是或者的意思

=========================
格式1和格式2
vim 6.sh
#! /bin/bash
n=10
if [ $n -gt 5 ]
then
echo "greater than 5"
else
echo "not greater than 5"

fi

======================
格式3
vim 6.sh
#! /bin/bash
n=3
if [ $n -gt 5 ]
then
echo "greater than 5"
elif [ $n -lt 2 ]
then
echo "less than 2"
else
echo "greater than 2"

fi


6. if 判斷文件、目錄屬性
[ -f file ]判斷是不是普通文件,且存在
[ -d file ] 判斷是不是目錄,且存在
[ -e file ] 判斷文件或目錄是否存在======
[ -r file ] 判斷文件是否可讀
[ -w file ] 判斷文件是否可寫
[ -x file ] 判斷文件是否可執行

echo $RANDOM 生成一個隨機數
echo $RANDOM$RANDOM
echo $RANDOM$RANDOM$RANDOM |cut -c 1-10 只要前10位
或者
mkpasswd
mkpasswd -l 20
mkpasswd -l 20 -s 0 特殊符號
mkpasswd -l 20 -s 0 -c 0 -C 0

相關文章
相關標籤/搜索