#!/bin/bash
echo "Hello World !"
# 字符串拼接
name="你的名字"
name_last="小明"
echo $"字符串拼接"
echo $name+$name_last
#數組
arr=(value1 value2 valur3)
echo ${arr[0]}
length=${#arr[@]}
echo $"字符創長度="$length
#傳參
echo "Shell 傳遞參數實例!";
echo "執行的文件名:$0";
echo "第一個參數爲:$1";
echo "第二個參數爲:$2";
echo "第三個參數爲:$3";
echo "參數個數爲:$#";
echo "傳遞的參數作爲一個字符串顯示:$*";
# $* 與 $@ 結果區別
echo "-- \$* 演示 ---"
for i in "$*"; do
echo $i
done
echo "-- \$@ 演示 ---"
for i in "$@"; do
echo $i
done
# 算術運算符
a=10
b=20
val=`expr $a + $b`
echo "a + b : $val"
val=`expr $a - $b`
echo "a - b : $val"
val=`expr $a \* $b`
echo "a * b : $val"
val=`expr $b / $a`
echo "b / a : $val"
val=`expr $b % $a`
echo "b % a : $val"
if [ $a == $b ]
then
echo "a 等於 b"
fi
if [ $a != $b ]
then
echo "a 不等於 b"
fi
# 關係運算符
a=10
b=20
if [ $a -eq $b ]
then
echo "$a -eq $b : a 等於 b"
else
echo "$a -eq $b: a 不等於 b"
fi
if [ $a -ne $b ]
then
echo "$a -ne $b: a 不等於 b"
else
echo "$a -ne $b : a 等於 b"
fi
if [ $a -gt $b ]
then
echo "$a -gt $b: a 大於 b"
else
echo "$a -gt $b: a 不大於 b"
fi
if [ $a -lt $b ]
then
echo "$a -lt $b: a 小於 b"
else
echo "$a -lt $b: a 不小於 b"
fi
if [ $a -ge $b ]
then
echo "$a -ge $b: a 大於或等於 b"
else
echo "$a -ge $b: a 小於 b"
fi
if [ $a -le $b ]
then
echo "$a -le $b: a 小於或等於 b"
else
echo "$a -le $b: a 大於 b"
fi
# 布爾運算符
a=10
b=20
if [ $a != $b ]
then
echo "$a != $b : a 不等於 b"
else
echo "$a == $b: a 等於 b"
fi
if [ $a -lt 100 -a $b -gt 15 ]
then
echo "$a 小於 100 且 $b 大於 15 : 返回 true"
else
echo "$a 小於 100 且 $b 大於 15 : 返回 false"
fi
if [ $a -lt 100 -o $b -gt 100 ]
then
echo "$a 小於 100 或 $b 大於 100 : 返回 true"
else
echo "$a 小於 100 或 $b 大於 100 : 返回 false"
fi
if [ $a -lt 5 -o $b -gt 100 ]
then
echo "$a 小於 5 或 $b 大於 100 : 返回 true"
else
echo "$a 小於 5 或 $b 大於 100 : 返回 false"
fi
# 邏輯運算符
a=10
b=20
if [[ $a -lt 100 && $b -gt 100 ]]
then
echo "返回 true"
else
echo "返回 false"
fi
if [[ $a -lt 100 || $b -gt 100 ]]
then
echo "返回 true"
else
echo "返回 false"
fi
# 字符串運算符
a="abc"
b="efg"
if [ $a = $b ]
then
echo "$a = $b : a 等於 b"
else
echo "$a = $b: a 不等於 b"
fi
if [ $a != $b ]
then
echo "$a != $b : a 不等於 b"
else
echo "$a != $b: a 等於 b"
fi
if [ -z $a ]
then
echo "-z $a : 字符串長度爲 0"
else
echo "-z $a : 字符串長度不爲 0"
fi
if [ -n "$a" ]
then
echo "-n $a : 字符串長度不爲 0"
else
echo "-n $a : 字符串長度爲 0"
fi
if [ $a ]
then
echo "$a : 字符串不爲空"
else
echo "$a : 字符串爲空"
fi
# 文件測試運算符
file="/Users/zhouzailong/Desktop/test.sh "
if [ -r $file ]
then
echo "文件可讀"
else
echo "文件不可讀"
fi
if [ -w $file ]
then
echo "文件可寫"
else
echo "文件不可寫"
fi
if [ -x $file ]
then
echo "文件可執行"
else
echo "文件不可執行"
fi
if [ -f $file ]
then
echo "文件爲普通文件"
else
echo "文件爲特殊文件"
fi
if [ -d $file ]
then
echo "文件是個目錄"
else
echo "文件不是個目錄"
fi
if [ -s $file ]
then
echo "文件不爲空"
else
echo "文件爲空"
fi
if [ -e $file ]
then
echo "文件存在"
else
echo "文件不存在"
fi
# 顯示命令執行結果
echo `date`
# echo "It is a test" > myfile
# Shell printf 命令
# format-string爲雙引號
printf "%d %s\n" 1 "abc"
# 單引號與雙引號效果一樣
printf '%d %s\n' 1 "abc"
# 沒有引號也可以輸出
printf %s abcdef
# 格式只指定了一個參數,但多出的參數仍然會按照該格式輸出,format-string 被重用
printf %s abc def
printf "%s\n" abc def
printf "%s %s %s\n" a b c d e f g h i j
# 如果沒有 arguments,那麼 %s 用NULL代替,%d 用 0 代替
printf "%s and %d \n"
# 讀取鍵盤信息
# echo '按下 <CTRL-D> 退出'
# echo -n '輸入你最喜歡的網站名: '
# while read URL
# do
# echo "是的!$URL 是一個好網站"
# done
#shll 函數
demoFun(){
echo "這是我的第一個 shell 函數!"
}
echo "-----函數開始執行-----"
demoFun
echo "-----函數執行完畢-----"
# 帶有return語句的函數
# funWithReturn(){
# echo "這個函數會對輸入的兩個數字進行相加運算..."
# echo "輸入第一個數字: "
# read aNum
# echo "輸入第二個數字: "
# read anotherNum
# echo "兩個數字分別爲 $aNum 和 $anotherNum !"
# return $(($aNum+$anotherNum))
# }
# funWithReturn
# echo "輸入的兩個數字之和爲 $? !"
# 函數參數
funWithParam(){
echo "第一個參數爲 $1 !"
echo "第二個參數爲 $2 !"
echo "第十個參數爲 $10 !"
echo "第十個參數爲 ${10} !"
echo "第十一個參數爲 ${11} !"
echo "參數總數有 $# 個!"
echo "作爲一個字符串輸出所有參數 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
# $# 傳遞到腳本或函數的參數個數
# $* 以一個單字符串顯示所有向腳本傳遞的參數
# $$ 腳本運行的當前進程ID號
# $! 後臺運行的最後一個進程的ID號
# $@ 與$*相同,但是使用時加引號,並在引號中返回每個參數。
# $- 顯示Shell使用的當前選項,與set命令功能相同。
# $? 顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。
# Shell 輸入/輸出重定向
# 輸出重定向在用戶文件中(users):
# who > users
# cat 命令查看文件內容
cat users
echo "更改後"
#文件添加內容 如果不希望文件內容被覆蓋,可以使用 >> 追加到文件末尾
echo "www.baidu.com222" > users
cat users
# printf "新的"
# 統計 users 文件的行數
# 行數+入讀取內容
wc -l users
# 輸入讀取內容
wc -l < users
# 同時替換輸入和輸出,執行command1,從文件infile讀取內容,然後將輸出寫入到outfile中。
echo "雙文件"
who > outfile
who > infile
echo "添加一席" > infile
echo "輸出文件的原內容" > outfile
cat infile
echo "-------"
cat outfile