前言
作為標準Linux用戶风题,Shell腳本是基本需要掌握的技能,這也是初級linux程序員(beginner)過渡到中級的必要條件之一。
我對bash的理解是bash是shell的一種環(huán)境,bash全稱 Bourne Again Shell 是linux標準的默認shell攀甚,當然除了bash還有許多sh語言,例如csh岗喉、tcsh秋度,當然就不在這里展開了。
學習Shell钱床、Linux可不能以windows的方式來思考對待荚斯,在Shell中基本所有的command都是一個個小小的程序,不僅像我們常用的'cd'查牌、'ls'事期,連 '[' 這種符合都其實是一個個可執(zhí)行程序。小小總結下一些linux的特性:1)文件組成一切纸颜。 2)短小單一的程序完成復雜事件兽泣。 3)軟件的各種配置信息都是通過文本方式來存儲,例如最基本的.bashrc
接下來介紹一些語法常識
先介紹些大家或許都多多少少熟悉的一些I\O知識
> 輸出 例如 cat sometext.txt > output.txt
< 輸入
>> 輸出 但是并不會override原本文件 而是會選擇追加信息于已存在的文件后
2> 輸出錯誤信息
&> 輸出正常輸出以及錯誤信息
轉移胁孙、引用相關符號
“ ” 允許轉義唠倦、引用
‘ ’ 禁止轉義、引用
` ` 替換里面命令輸出 例如for i in`seq 1 99`: 可以執(zhí)行從1數(shù)到99的命令
$( ) 和 ` `一樣 都是非常常用的命令
舉個小例子
for i in `seq 1 99`:
do
echo 'hello world!'
done
就可以在terminal中print出99行hello world!的字符
一些與$相關的符號
$? 輸出0為正常 非0為異常
$0 輸出命令本身 $1-9 為第幾個輸入參數(shù) $* 所有輸入參數(shù) $# 輸入參數(shù)的個數(shù)
$[ ] 計算 但不輸出 例如$[ 1+2 ]其實就是3
expr 計算并且輸出
字符串截取
dirname $var 截取路徑
basename $var 截取文件名
expr substr $var num_start num_end 從1開始
${var:num_start:num_end} 從0開始 并不輸出
cut: echo $var | cut -b num_start-num_end 開始或結尾課省略 不要忘記中間的’-’
字符串替換
${var/old/new} 只替換第一個
${var//old/new} 替換所有
獲取隨機字符->ASCII字符
head -1 /dev/urandom | md5sum
條件測試命令
[ test expression ] && echo YES 注意[ ]用空格隔離
整數(shù)值比較
-eq ==
-ne !=
-gt >
-lt <
-ge >=
-le <=
字符串比較
= 相同
!= 不相同
存在及識別
-e 目標是否存在
-d 是否為目錄
-f 是否為文件
權限檢測
-r 是否有讀取
-w 是否有寫入 所有者(root)例外
-x 是否可執(zhí)行
if 條件語句
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
then echo “Host $1 is up.”
else echo “Host $1 is down.”
fi
if [ test case ] ; then
elif [ test case ] ; then
else
fi
for 循環(huán)語句
for 變量名 in 取值列表
do 命令序列
done
其他一些有用的小命令
wc -l 檢測行數(shù) e.g. `who | wc -l` 判斷當前user數(shù)量
$USER 用戶
$RANDOM 隨機數(shù) e.g. $[RANDOM % 100]
head -1 /dev/urandom | md5sum | cut -b -5 隨機字符5個
read -p “prompt” var
uname 獲取當前系統(tǒng)名字 主要mac在這里叫Darwin 可用于版本控制
寫了這么多雜雜的教程涮较,上個簡單的實例稠鼻,相信大家現(xiàn)在都能很容易的理解了
這個程序是我為了自動compile、test學校編程作業(yè)而寫的狂票,沒錯我還是個學生候齿。。闺属。這個程序很簡單慌盯,請大神不要鄙視,因為其中需要修改部分file用于測試chanllenge作業(yè)所以還用了字符串處理 有些無語
編寫以及運行
因為都是在terminal里屋剑,我是用vim來寫的,裝了一大堆插件诗眨,效果誰用誰知道唉匾。
記得在頭行加上‘#!/bin/bash’ 標注這是個bash腳本,而且里面運用了各種bash命令程序
運行呢 有三種方法 我在這里介紹兩種常用的:
1)sh blabla.sh
2) chmod +x blabla 變成可執(zhí)行文件 然后./運行就好啦