1. shell腳本開頭
#!/bin/bash #shell腳本開頭
2. 註釋
##單行註釋
:<<!#多行註釋
...
...
!
3. 字符串
name="java"
echo ${#name} #統計name的長度
4. 反引號
反引號: 被``引起來的內容解釋器優先執行
5. 變量
name="yinyongjie";
echo $name 也可寫成 echo ${name}
$輸出變量
變量名和等號之間不能有空格
6.流程控制
for循環
數字循環寫法一:
for((i=0;i<10;i++));
do
echo "$i-----"
done
數字循環寫法二:
for i in {1..10}
do
ehoc "$i-----"
done
數字循環寫法三:
for i in $(seq 1 10)
do
echo "$i---"
done
字符循環:
for i in `ls`
do
echo "$i"
done
==等於
-gt大於
-lt小於
if 語句語法格式:
if condition
then
command1
command2
...
commandN
fi
if else 語法格式:
if condition
then
command1
command2
...
commandN
else
command
fi
while 語句
while condition
do
command
done
無限循環
while :
do
command
done
或者
while true
do
command
done
case語法 : 如果值沒有找到匹配的模式用*捕獲該值
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
結束語
breakbreak命令允許跳出所有循環
continue 它不會跳出所有循環,僅僅跳出當前循環。
7. 標準輸入
read 命令從標準輸入中讀取一行,並把輸入行的每個字段的值指定給 shell 變量
8. 輸出
echo自動帶換行
printf不帶換行
-e開啓轉義
\n換行
\c不換行
例子1:
echo -e "OK! \n" # -e 開啓轉義
echo "It it a test"
輸出結果:
OK!
It it a test
例子2:
#!/bin/sh
echo -e "OK! \c" # -e 開啓轉義 \c 不換行
echo "It is a test"
輸出結果:
OK! It is a test
9. 覆蓋和追加
>輸出重定向(覆蓋)
>>輸出重定向(追加)
10. 數組
語法: array_name=(value1 ... valuen)
讀取數組:${array_name[index]}
獲取數組中的所有元素: ${my_array[*]} 或者 ${my_array[@]}
獲取數組的長度: ${#my_array[*]} 或者 ${#my_array[@]}
遍歷數組如下:
arr=(1 2 3 4 5)
for((i=0;i<${#arr[*]};i++));
do
echo "------${arr[$i]}"
done
11. 函數
語法:可以帶function fun() 定義,也可以直接fun() 定義,不帶任何參數。
[ function ] funname [()]
{
action;
[return int;]
}
12. 日期
date
date +%Y%-m-%d
date +%F#輸出格式:2017-01-01
date +"%Y-%m-%d %H:%M:%S"
date -d "+1 day" +%Y-%m-%d
date -d "-1 day" +%Y-%m-%d
date -d "+1 month" +%Y-%m-%d
date -d "-1 month" +%Y-%m-%d
date -d "+1 year" +%Y-%m-%d#1年前
date -d "-1 year" +%Y-%m-%d
date -d "+1 year" +%F
13. select
#!/bin/bash
host_list=("10.0.11.235" "10.0.11.236" "10.0.11.237" "10.0.11.238")
select host in ${host_list[*]};
do
break
done
14. shell傳參
第一種: $1 $2
第二種: read