linux_shell基礎-變數、陣列、運算子
#!/bin/bash
# echo 'hello world'
# name='http://www.baidu.com'
# for file in $(ls ./); do
# echo "this is a ${file},welcome to ${name}! "
# done
# for info in Ada Coffe Action Java;do
# echo "I am good at ${info}Script"
# done
# name2='test1.10'
# unset name2 #'''刪除變數 unset'''
# echo $name2
# str1='runoob'
# str="Hello,I know you are \"${str1}\"! "
# echo $str
# string='abcdef'
# echo '${#string},${string}' #'''獲取字串長度,單引號不能使用變數轉義符,所有輸出均為字串型別'''
# echo "${#string},${string}" #'''雙引號模式下才可正常引用變數'''
# string1_1='runoob is a great site'
# echo ${string1_1:1:10} #'''提取字串{n,m}'''
# echo `expr index "${string1_1}" io`
# echo "Shell 傳遞引數例項!";
# echo "執行得檔名:$0";
# echo "第一個引數為:$1";
# echo "第二個引數為:$2";
# echo "引數個數為:$#";
# echo "傳遞的引數作為一個字串顯示:$*";
# echo "傳遞引數展示
# # $*與[email protected]的區別:
# # 相同點:都是引用所有引數
# #不同點:只有在雙引號中體現出來,*等價於傳遞了一個引數(例如1 2 3),而@等價於
# #‘1’ ‘2’ ‘3’(傳遞了三個引數)
# string1_1="this is a test Script"
# echo ${#string1_1} #'''獲取字串長度'''
# echo '${#string1_1},value is ${string1_1}'
# echo "${#string1_1},value is ${string1_1}" #'''字元拼接'''
# echo `expr index "${string1_10_1}" ht`
# #'''這裡使用的是反引號,不是單引號,查詢字元的位置,哪個字母先出現就計算哪個'''
# shuzu1_2=(test1 test2 test3 test4)
# #'''定義陣列格式,使用@符號訪問所有元素'''
# echo ${shuzu1_2[@]} #'''訪問所有元素'''
# echo ${shuzu1_2[0]} #'''訪問第一個元素'''
# shuzu1_2[4]=test5
# echo ${shuzu1_2[@]}
# length_shuzu1_2=${#shuzu1_2[@]}
# echo ${length_shuzu1_2} #'''獲取陣列長度'''
#註釋,以#開頭的行就是註釋,通過每一行加一個#號設定多行註釋,例如:
#這是註釋1
#這是註釋2.。
#這是註釋n
#多行註釋格式,EOF也可以為使用其他符號
# :<<EOF :<<!
# 註釋內容。。。 註釋內容。。。
# 註釋內容2.。。 註釋內容2。。。
# 註釋內容n。。。 註釋內容n。。。
# EOF !
# echo "-- \$* 演示 ---"
# for i in "$*";do
# echo $i
# done
# echo "-- \
# for i in "[email protected]";do
# echo $i
# done
# canshu1_2=(A B " C " D)
# for num_list in ${canshu1_2};do
# echo "NUM is ${num_list[@]}"
# echo "NUM is ${num_list[*]}"
# done
# echo "NUM is ${canshu1_2[@]}"
# echo "NUM is ${canshu1_2[*]}"
# echo "NUM is ${#canshu1_2}"
# echo "NUM is ${#canshu1_2[@]}"
# 算術運算子:+ - * / % == !=,加減乘除取餘相等不相等
# 表示式和運算子之間要有空格,例如 2+2 是不對的,必須寫成 2 + 2,
#注意:條件表示式要放在方括號之間,並且要有空格,例如: [$a==$b] 是錯誤的,必須寫成 [ $a == $b ]
# 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 "a/b:${val}"
#關係運算符:只支援數字,不支援字串,除非字串的值是數字
#-eq:檢測兩個數是否相等,-ne:檢測兩個數是否不相等,
#-gt檢測左邊的數是否大於右邊的 G:greater L:Less
#-lt:檢測左邊的數是否小於右邊的
#-ge:檢測左邊的數是否大於等於右邊的
#-le:檢測左邊的數是否小於等於右邊的
# 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
#布林運算子:!:非運算表示式為 true 則返回 false,否則返回 true
#-o 或運算,有一個表示式為 true 則返回 true
#-a 與運算,兩個表示式都為 true 才返回 true
# 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
#邏輯運算子
#&& 邏輯的 AND,|| 邏輯的 OR
a=10
b=20
# if [[ $a -gt 100 && $b -gt 5 ]]
# then
# echo "$a 大於 100且$b 大於5:返回True"
# else
# echo "$a 大於 100且$b 大於5:返回false"
# fi
# if [[ $a -gt 100 || $b -gt 5 ]]
# then
# echo "$a 大於 100或者$b 大於5:返回True"
# else
# echo "$a 大於 100或者$b 大於5:返回false"
# fi
#字串運算子:
#=:檢測兩個字串是否相等,相等返回true
#!=:檢測兩個字串是否不相等,不相等返回true
#-z:將車字串長度是否為0,為0返回true
#-n:將車字串長度是否為0,不為0返回true
#str:檢測字串是否為空,不為空返回true
# 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
#檔案測試運算子:
:<<EOF
-b file :檢測檔案是否是塊裝置檔案,如果是,返回true
-c file :檢測檔案是否是字元裝置檔案,如果是,返回true
-d file :檢測檔案是否是目錄,如果是,返回true
-f file :檢測檔案是否是普通檔案(既不是目錄,也不是裝置檔案),如果是,返回true
-g file :檢測檔案是否設定了 SGID 位,如果是,返回true
-k file :檢測檔案是否設定了粘著位(Sticky Bit),如果是,則返回 true
-p file :檢測檔案是否有名管道,如果是,則返回 true
-u file :檢測檔案是否設定了 SUID 位,如果是,返回true
-r file :檢測檔案是否可讀,如果是,返回true
-w file :檢測檔案是否可寫,如果是,返回true
-x file :檢測檔案是否可執行,如果是,返回true
-s file :檢測檔案是否為空,如果是,返回true
-e file :檢測檔案是否存在,如果是,返回true
EOF
file="./a"
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 ./d ]
then
echo "檔案存在"
else
echo "檔案不存在"
fi