1是尔、字符串
(1)字符串的使用
String=hello
String1=world
String2=“hello瞻鹏,shell”
echo ${string}
echo ${string1}
echo ${string2}
(2)字符串的拼接
引用字符串的值尖滚,并將多個(gè)字符串的值作為新的字符串,賦值給新的變量庐氮,即
Str=“$string1 $string2”
(3)字符串的長度
Lenth=${#string} //#為統(tǒng)計(jì)變量指向的內(nèi)容字符串?dāng)?shù)量
(3)字符串的分割
nstr=${string:a:b}
//把字符串string從第a個(gè)之后语稠,開始截取b個(gè)字符,賦給 新的變量
2弄砍、只讀變量
readonly//只讀
程序
num=34
echo $num
nun=88 #錯(cuò)誤(error)
echo $num
// 只讀變量不可更改
3仙畦、清除變量
unset //清除變量的值
程序
num=3
echo $num
unset num
echo $num
注意:unset是清除變量的值,若變量未定義直接使用音婶,其值為空慨畸。
3、 需強(qiáng)調(diào)的問題
(1) shell腳本程序必須指定腳本的解釋程序桃熄,即在shell腳本程序的第一行必須是:
1先口、 #!/bin/bash
(2) 空格問題
變量賦值時(shí)瞳收,等號(hào)兩邊不允許有空格碉京。其他情況:盡量加空格
4、 權(quán)限問題
sudo chmod a+x filename
sudo chmod u+x,g+x filename
sudo chmod +x filename
sudo chmod 777 filename
5螟深、 從鍵盤獲得輸入數(shù)值
read 變量名
a) read:在沒有輸入時(shí)谐宙,則一直等待
b) read 變量1 變量2 變量3
此情況,將輸入的第一個(gè)值賦值給變量1界弧,第二個(gè)值賦值給變量2凡蜻,是剩余的值全部給變量3
不建議使用:
read 變量1 變量2 變量3
建議:
read 變量1
read變量2
read 變量3
6搭综、 shell的三大語句
功能型語句、說明型語句划栓、結(jié)構(gòu)型語句
(1)說明型語句
以#開頭的語句兑巾,至行末均為說明型語句,說明型語句不解釋執(zhí)行忠荞,起注釋作用蒋歌。作用范圍——整行
說明型語句的位置,可以放在程序中的任何位置委煤,可以放在解釋執(zhí)行語句之后堂油,從#開始的部分到行末.
1、#只能注釋一行
(2)功能型語句
系統(tǒng)命令碧绞,自寫程序……
(3)結(jié)構(gòu)型語句
多路分支語句府框,循環(huán)語句,循環(huán)控制語句讥邻,測(cè)試語句迫靖,條件語句
7、 結(jié)構(gòu)型語句
加计维、減袜香、乘、除鲫惶、取余(整數(shù))
expr let :針對(duì)整數(shù)做簡單的加、減实抡、乘欠母、除、取余(整數(shù))吆寨。
expr:
sum=`expr $num +$num1`
sum1=`expr $num \* $num` // \* 轉(zhuǎn)義字符赏淌,為乘法
sum=$( expr $num +$num1)
sum1=$( expr $num \* $num) //注意字符問題
let:
let sum=num+num1
let sum2=num\*num1
9、條件測(cè)試語句
(1)test 測(cè)試語句*****需要測(cè)試******
(2)[ 條件測(cè)試語句]:注意[]的空格W那濉A!
-e file //測(cè)試file是否存在
-d file //測(cè)試file是否是目錄
-f file //測(cè)試file是否是文件
-r file //測(cè)試file是否可讀
-w file //測(cè)試file是否可寫
-x file //測(cè)試file是否可執(zhí)行
10算數(shù)運(yùn)算比較符:
-eq //是否相等
-ne //是否不等
-gt //是否大于
-ge //是否大于等于
-lt //是否小于等于
-le //是否小于等于
11字符串比較符
-z string:string長度是否為零
-n string:若string非零辣卒,為真
string=string1:是否相同
string!=string1:是否不同
12邏輯操作符:
&&:邏輯與
事件1
&& 事件2:當(dāng)事件1和事件2都為真掷贾,則為真
||:邏輯或
事件1 || 事件2:當(dāng)事件1或事件2為真,則為真
-a:and
-o:or
13常見變量:
$?:命令執(zhí)行后的返回狀態(tài)荣茫,返回零表示執(zhí)行成功
$*:所有參數(shù)列表 //
$@:所有參數(shù)列表 //從外部列表中輸入
$#:傳遞到腳本的參數(shù)個(gè)數(shù)
$0:可執(zhí)行命令本身想帅,不是位置參數(shù)
echo -n:不換行輸出!
14.If語句
(1)if [ 條件]
then
命令
fi
(2)if [ 條件]
then
命令
else
[ 條件 ]
then
命令
else
fi
若表達(dá)式為真啡莉,則執(zhí)行命令表1中的命令港准,退出if語句旨剥;
否則執(zhí)行命令表2中的語句退出if;
?
15.case...esac
多路分支語句case用于多重條件測(cè)試浅缸,語法結(jié)構(gòu)清晰自然轨帜,
語法結(jié)構(gòu)為:
case 字符串變量in #case語句只能檢測(cè)字符串變量
模式1) #各模式中可用文件名元字符,以右括號(hào)結(jié)束
命令表1
;;#命令表以單獨(dú)的雙分號(hào)行結(jié)束衩椒,退出case語句
模式2)
命令表2
;;
......
模式n) #模式n常寫為字符*阵谚,表示所有其他模式
命令表n
;; #最后一個(gè)雙分號(hào)行可以省略
esac
| 多重選擇
? 任意一個(gè)字符
* 任意多個(gè)字符
16烟具、for循環(huán)
for 值 in 值列表
do
for 值 in 值列表
命令
done
命令
done
// 三角形
**
方法二:
for((i=0;i<10;i++))
17. while循環(huán)
語法結(jié)構(gòu):
while 命令或表達(dá)式
do
命令表
done
while語句首先測(cè)試氣候的命令或者表達(dá)式的值梢什,如果為真,就執(zhí)行一次
循環(huán)體中的命令朝聋,然后在測(cè)試該命令或表達(dá)式的值嗡午, 執(zhí)行循環(huán)體,直到該命令或表達(dá)式為假時(shí)退出循環(huán)冀痕。 while語句的退出狀態(tài)為命令表中被執(zhí)行的最后一條命令的退出狀態(tài)荔睹。
18.break和continue
break n #跳出n層
continue語句則馬上轉(zhuǎn)到最近一層循環(huán)語句的下一輪循環(huán)上。
continue n #跳轉(zhuǎn)到最近n層循環(huán)語句的下一輪循環(huán)上言蛇。