1、字符串
(1)字符串的使用
String=hello
String1=world
String2=“hello,shell”
echo ${string}
echo ${string1}
echo ${string2}
(2)字符串的拼接
引用字符串的值,并將多個字符串的值作為新的字符串,賦值給新的變量,即
Str=“$string1 $string2”
(3)字符串的長度
Lenth=${#string} //#為統計變量指向的內容字符串數量
(3)字符串的分割
nstr=${string:a:b}
//把字符串string從第a個之后,開始截取b個字符,賦給 新的變量
2、只讀變量
readonly//只讀
程序
num=34
echo $num
nun=88 #錯誤(error)
echo $num
// 只讀變量不可更改
3、清除變量
unset //清除變量的值
程序
num=3
echo $num
unset num
echo $num
注意:unset是清除變量的值,若變量未定義直接使用,其值為空。
3、 需強調的問題
(1) shell腳本程序必須指定腳本的解釋程序,即在shell腳本程序的第一行必須是:
1、 #!/bin/bash
(2) 空格問題
變量賦值時,等號兩邊不允許有空格。其他情況:盡量加空格
4、 權限問題
sudo chmod a+x filename
sudo chmod u+x,g+x filename
sudo chmod +x filename
sudo chmod 777 filename
5、 從鍵盤獲得輸入數值
read 變量名
a) read:在沒有輸入時,則一直等待
b) read 變量1 變量2 變量3
此情況,將輸入的第一個值賦值給變量1,第二個值賦值給變量2,是剩余的值全部給變量3
不建議使用:
read 變量1 變量2 變量3
建議:
read 變量1
read變量2
read 變量3
6、 shell的三大語句
功能型語句、說明型語句、結構型語句
(1)說明型語句
以#開頭的語句,至行末均為說明型語句,說明型語句不解釋執行,起注釋作用。作用范圍——整行
說明型語句的位置,可以放在程序中的任何位置,可以放在解釋執行語句之后,從#開始的部分到行末.
1、#只能注釋一行
(2)功能型語句
系統命令,自寫程序……
(3)結構型語句
多路分支語句,循環語句,循環控制語句,測試語句,條件語句
7、 結構型語句
加、減、乘、除、取余(整數)
expr let :針對整數做簡單的加、減、乘、除、取余(整數)。
expr:
sum=`expr $num +$num1`
sum1=`expr $num \* $num` // \* 轉義字符,為乘法
sum=$( expr $num +$num1)
sum1=$( expr $num \* $num) //注意字符問題
let:
let sum=num+num1
let sum2=num\*num1
9、條件測試語句
(1)test 測試語句*****需要測試******
(2)[ 條件測試語句]:注意[]的空格!!!
-e file //測試file是否存在
-d file //測試file是否是目錄
-f file //測試file是否是文件
-r file //測試file是否可讀
-w file //測試file是否可寫
-x file //測試file是否可執行
10算數運算比較符:
-eq //是否相等
-ne //是否不等
-gt //是否大于
-ge //是否大于等于
-lt //是否小于等于
-le //是否小于等于
11字符串比較符
-z string:string長度是否為零
-n string:若string非零,為真
string=string1:是否相同
string!=string1:是否不同
12邏輯操作符:
&&:邏輯與
事件1
&& 事件2:當事件1和事件2都為真,則為真
||:邏輯或
事件1 || 事件2:當事件1或事件2為真,則為真
-a:and
-o:or
13常見變量:
$?:命令執行后的返回狀態,返回零表示執行成功
$*:所有參數列表 //
$@:所有參數列表 //從外部列表中輸入
$#:傳遞到腳本的參數個數
$0:可執行命令本身,不是位置參數
echo -n:不換行輸出!
14.If語句
(1)if [ 條件]
then
命令
fi
(2)if [ 條件]
then
命令
else
[ 條件 ]
then
命令
else
fi
若表達式為真,則執行命令表1中的命令,退出if語句;
否則執行命令表2中的語句退出if;
?
15.case...esac
多路分支語句case用于多重條件測試,語法結構清晰自然,
語法結構為:
case 字符串變量in #case語句只能檢測字符串變量
模式1) #各模式中可用文件名元字符,以右括號結束
命令表1
;;#命令表以單獨的雙分號行結束,退出case語句
模式2)
命令表2
;;
......
模式n) #模式n常寫為字符*,表示所有其他模式
命令表n
;; #最后一個雙分號行可以省略
esac
| 多重選擇
? 任意一個字符
* 任意多個字符
16、for循環
for 值 in 值列表
do
for 值 in 值列表
命令
done
命令
done
// 三角形
**
方法二:
for((i=0;i<10;i++))
17. while循環
語法結構:
while 命令或表達式
do
命令表
done
while語句首先測試氣候的命令或者表達式的值,如果為真,就執行一次
循環體中的命令,然后在測試該命令或表達式的值, 執行循環體,直到該命令或表達式為假時退出循環。 while語句的退出狀態為命令表中被執行的最后一條命令的退出狀態。
18.break和continue
break n #跳出n層
continue語句則馬上轉到最近一層循環語句的下一輪循環上。
continue n #跳轉到最近n層循環語句的下一輪循環上。