shell入門及實踐

解釋器

解釋器是一種命令解釋器,主要做用是對命令進行運行和解釋,將須要執行的操做傳遞給操做系統內核並執行shell

#!/bin/bash(默認),指定解釋器bash

#!/bin/bash
#這是第一個shell腳本
#by uncleyong
echo ‘hello, shell'

變量

shell的變量不須要先聲明,能夠直接使用,eg:a=15字體

調用變量的話 $a 或者 ${a},建議用後者,這樣能夠和其它字符串拼接操作系統

$?, 判斷上一條命令是否成功,0表示成功,其它表示不成功3d

$0,返回腳本的文件名稱blog

$1-$9,返回對應的參數值字符串

$*,返回全部的參數值是什麼jenkins

$#,返回參數的個數和it

#!/bin/bash
#by uncleyong

echo "腳本名稱:$0"
echo "第一個參數是:$1"
echo "第二個參數是:$2"
echo "一共有多少參數:$#"
echo "這些參數是:$*"

經常使用符號

> ,會覆蓋原有的內容自動化

>> ,不會覆蓋原有的內容

; ,分號,執行多條命令,cat 1.txt; ls

| ,管道符,ps –ef | grep xxx

&& ,前面的命令執行成功,後面的才能夠執行

|| ,前面的命令執行失敗,後面的才能夠執行

「」 ,雙引號中的變量輸出變量值

‘’ ,單引號中的變量輸出自己

`` ,輸出命令結果 eg:a=`date`;echo $a

整數運算符

  expr 1 + 2

  echo $[1 + 2]

  echo $((1 + 2))

  注意: expr加號兩邊要有空格,a=1;b=2;expr $a + $b; echo $[a+b]; echo $((a+b))

餘 

小數

bc計算器

保留多少位小數能夠經過scale,echo "scale=2;3/2" | bc

條件判斷

文件目錄

語法:[ 判斷表達式 ],注意,[]內部左右要有空格

-e 目標是否存在

[ -e test.sh ] || touch test.sh

-d 是否爲路徑

[ -d /root/test ] && echo "/root/test存在"

-f 是否爲文件

[ -f test.sh ] && echo "是文件"

權限

-r 是否有讀取權限

-w 是否有寫入權限

-x 是否有執行權限

[ -x test.txt ] && echo '有執行權限'

字符串

[ `echo '1.2 < 2.1' | bc` -eq 1 ] && echo '小於'

if

#!/bin/bash
if [ $1 -eq $2 ]
then
echo "$1 等於 $2"
else
echo "$1 不等於 $2"
fi

鍵盤輸入分數,顯示成績等級

[ -z STRING ] 「STRING」 的長度爲零則爲真。

2> /dev/null;then,下面判斷報錯的時候輸出到無底洞

#!/bin/bash
read -p "請輸入你的分數:" score
if [ -z $score ];then
echo "你尚未輸入分數"
exit
fi
if [ $score -ge 0 ] 2> /dev/null && [ $score -lt 60 ];then
echo "差"
elif [ $score -lt 80 ] 2> /dev/null;then
echo "中"
elif [ $score -lt 90 ] 2> /dev/null;then
echo "良"
elif [ $score -lt 101 ] 2> /dev/null;then
echo "優"
else
echo "分數值爲0~100之間"
fi

case

case 變量 in 
值1 )
執行動做1
;;
值2 )
執行動做2
;;
....
esac

輸入性別,輸出對應的結果

#!/bin/bash
echo '請輸入性別:'
read sex
case $sex in
'男')
echo '帥哥'
;;
'女')
echo '美女'
;;
* )
echo '輸入有誤請從新輸入'
;;
esac

鍵盤輸入分數,顯示成績等級

#!/bin/bash
case $1 in
[0-9]|[0-5][0-9]) echo "差" ;;
[6-7][0-9]) echo "中" ;;
[8][0-9]) echo "良" ;;
[9][0-9]) echo "優" ;;
100) echo "優,太棒了,滿分" ;;
*) echo "輸入不符合規則,分數值爲0~100之間" ;;
esac

for

#!/bin/bash
#打印1-10這10個數字之和
sum=0
for ((i=1;i<11;i++))
do
sum=$(($sum + $i))
done
echo $sum

while

#!/bin/bash
#打印1-10這10個數字之和
sum=0
n=1
while [ $n -lt 11 ];do
sum=$(( $sum + $n )) 
n=$(( $n + 1 ))
done
echo $sum

輸入輸出

read -參數

-p:給出提示符,不支持"\n"換行

-s:隱藏輸入的內容

-t:給出等待的時間,超時會退出read

#!/bin/bash
read -p "請輸入密碼:" pass
echo '你輸入的密碼是:'$pass

字體特效

字體色30-37:
  echo -e "\033[31m 紅色字 \033[0m」
背景色40-47:
  echo -e "\033[47;34m 白底藍字 \033[0m"
特效
  echo -e "\033[1m 高亮度 \033[0m"
  echo -e "\033[4m 下劃線 \033[0m"
  echo -e "\033[5m 閃爍 \033[0m"

#!/bin/bash
read -p "`echo -e "\033[31;1;4;5m 請輸入您的密碼: \033[0m"`" pass
echo '你輸入的密碼是:'$pass

綜合應用

見jenkins中編寫的shell腳本。 詳見自動化持續集成。

相關文章
相關標籤/搜索