shell腳本編程

連續兩個!表示執行上一條命令
!n這裏的n是數字,表示執行命令歷史中第n條命令
!字符串 !pw表示執行命令歷史中最近的以pw開頭的命令
*匹配零個或多個字符 ,?匹配一個字符
輸入重定向 > >> < 2> 2>>
ctrl+z 使任務暫停 fg命令恢復 bg把任務丟到後臺 jobs能夠查看被暫停或者在後臺運行的任務
 
方法一:直接運行命令export PATH=$PATH:/usr/local/webserver/php/bin 和 export PATH=$PATH:/usr/local/webserver/mysql/bin
使用這種方法,只會對當前會話有效,也就是說每當登出或註銷系統之後,PATH 設置就會失效,只是臨時生效。
 
方法二:執行vi ~/.bash_profile修改文件中PATH一行,將/usr/local/webserver/php/bin 和 /usr/local/webserver/mysql/bin 加入到PATH=$PATH:$HOME/bin一行以後
這種方法只對當前登陸用戶生效
 
方法三:修改/etc/profile文件使其永久性生效,並對全部系統用戶生效,在文件末尾加上以下兩行代碼
PATH=$PATH:/usr/local/webserver/php/bin:/usr/local/webserver/mysql/bin
export PATH
 
最後:執行 命令source /etc/profile或 執行點命令 ./profile使其修改生效,執行完可經過echo $PATH命令查看是否添加成功
 
本篇文章來源於 Linux公社網站(www.linuxidc.com) 原文連接:http://www.linuxidc.com/Linux/2015-01/111727.htm
 ----------------------------------------------------------------------------------------------------------
shell介紹
A shell腳本只能在Linux平臺上運行
B shell只是腳本語言,依賴於Linux shell環境
C shell執行效率比較低下,遠遠沒有C快
D shell能夠幫咱們實現自動化運維
----------------------------------------------------------------
shell結構以及執行
vi 1.sh
#!/bin/bash
##描述
 
運行:
bash 1.sh sh 1.sh
相對路徑:chmod a+x 1.sh ./1.sh
絕對路徑:/root/shell/1.sh
差看腳本執行過程 sh -x 1.sh
-----------------------------------------------------------
date命令
直接輸出日期和時間
cal查看日曆 -y查看一全年
date -s "年-月-日 時:分:秒"
 
yum install -y ntp 同步時間
ntpdate time.windows.com 微軟時間服務器
ntpdate ntp.fudan.edu.cn 復旦時間服務器
 
+%F 年月日
+%T 時間
+%Y 四位年
+%y 兩位年
+%m 月份
+%d 日期
+%H 小時
+%M 分鐘
+%S 秒
+%s 距離1970年1月1日0時0秒0分一共過了多少秒
date +"+%Y-%m-%d %H:%M:%S"
 -----------------------------------------------------------------
數學運算
#!/bin/bash
a=1
b=2
sum=$[$a+$b]
echo "$a+$b=$sum"
 
#!/bin/bash
a=1;b=2
c=$[$a*$b]; echo $c
 
和用戶交互
#!/bin/bash
##Using `read` in shell script
read -p "please input a number:" x
read -p "please input another number:" y
sum=$s[$x+$y]
echo "The sum of the two numbers is: $sum"
read命令爲和用戶交互
------------------------------------------------------
if判斷的幾種用法
1.和文檔相關的判斷
-e 判斷文件或目錄是否存在
-d 是否是目錄,並是否存在
-f 是否爲普通文件,並存在
-r 文檔是否有度權限
-w 是否有寫權限
-x 是否可執行
if [-e filename]; then
 
2.變量是否爲空
-n選項能夠判斷一個變量是否爲空,注意必定要把變量引發來,-z能夠不用引發來
if [-n "$a"]; then echo "a is not null"; else echo "a is null"; fi
if [-z $a]; then echo "a is null"; fi
 
3.判斷條件爲一個命令
if grep -p '^aming:' /etc/passwd; then echo "user aming exist."; fi
grep -p 的做用是過濾但不輸出
---------------------------------------------------------------------------
case選擇
case 變量 in
value 1)
command
;;
value 2)
command
;;
value 3)
command
;;
*)
command
;;
Esac
不限制value的個數,*則表明除了上面的value外的其餘值。
#!/bin/bash
read -p "Input a number:" n
a=$[$n%2]
case $a in
1)
echo "The number is odd"
;;
0)
echo "The number is even."
;;
*)
echo "It's not a number!"
;;
esac
----------------------------------------------------------------
循環
for循環
#!/bin/bash
for i in `seq 1 5`; do
echo $i
done
 
結構
for 變量名 in 循環條件; do
command
done
------------------------------------------------
while循環
經常用來寫死循環的的腳本,用來監控某項服務
#!/bin/bash
a=5
while [$a -ge 1]; do
echo $a
a=$[$a-l]
done
 
while 條件; do
command
done
 
判斷系統負載的死循環
#!/bin/bash
while:; do
load=`uptime |awk `{print $(NF -2)}`|cut -d. -f1`
if[ $load -gt 10 ]
then
echo "system load is hugh."|mail -s "system load" 111111@163.com
fi
sleep 10
done
-----------------------------------------------------------------------------------------------
shell中斷繼續退出
break直接結束本層循環
 
#!/bin/bash
for i in `seq 1 5`;do
echo $i
if [ $i == 3 ]
then
break
fi
echo $i
done
echo aaaaaa
 
continue忽略continue之下的代碼,直接進行下一次循環
#!/bin/bash
for i in `seq 1 5`;do
echo $i
if [ $i == 3 ]
then
continue
fi
echo $i
done
echo $i
 
exit直接退出shell
#!/bin/bash
for i in `seq 1 5`;do
echo $i
if [ $i == 3 ]
then
exit
fi
echo $i
done
echo aaaaaaaa
---------------------------------------------------
shell函數
函數就是把一小段代碼整理到一個小單元中,並給這個小單元起一個名字,當用到段代碼的時候,直接調用這個小單元便可
格式
function f_() {
command
}
函數必需要放在最前面
vim func 1.sh
#!/bin/bash
input() {
echo $1
}
input aaa
 
加法運算函數
#!/bin/bash
sum() {
s=$[$1+$2]
echo $s
}
sum 1 2
 
#!/bin/bash
ip() {
ifconfig |grep -A1 "$1" |tail -1 |awk '{print $2}' |awk -F':' '{print $2}'
}
read -p "Pleasr input the eth name:" e
myip=`ip $e`
echo "$e address is $myip"
----------------------------------------------------------------------
shell數組
數組定義,一對括號表示的是數組,數組元素用「空格」符號分割開
a=(1 2 3 4 5)
echo $a
1
 
獲取數組的元素個數
echo ${#a[@]}
讀取數組中的某一個元素,標數從0開始,a[0]是第一個元素
echo ${a[2]}
打印整個數組的元素,或者使用 echo ${a[@]}
echo ${a[*]}
 
數組賦值
a[1]=100
echo ${a[*]}
a[5]=100
echo ${a[*]}
 
數組的刪除
a=(1 2 3 4 5)
unset a[1]
echo ${a[*]}
1 3 4 5
 
數組分片
a=(`seq 1 5`)
echo ${a[@]:0:3}
123
 
 
數組替換
a=(1 2 3 4 5)
echo ${a[@]/3/100}
1 2 100 4 5
---------------------------------------
if邏輯判斷
#!/bin/bash
read -p "please input your score:" a
if ((a<60));then
echo "You didn't pass the exam."
else
echo "Good! You passed the exam."
fi
 
-------------------------------------------------------------------------------------------------------
帶有elif
格式:
if 判斷語句一;then
command
elif 判斷語句二;then
command
else
command
fi
 
例如:
#!/bin/bash
read -p "please input your score: " a
if ((a<60));then
echo "You didn't pass the exam"
elif((a>=60)) && ((a<85));then
echo "Good! You pass the exam"
else
echo "very good! Your socre is very high!"
fi
--------------------------------------------------------------------------------------------------------
if ls /dev/sdb1 > /dev/null 2> /dev/null ; then 
判斷盤符
相關文章
相關標籤/搜索