課堂內(nèi)容
復(fù)習(xí)問題:
printf = "hello,world!"
printf "%s\n" $string
printf "%sn" "hello, world!"
printf "%s\n" hello, world!
printf "%s\n" "${string}"
三種寫法:
$string
${string}
"$string"
printf打印字符串:
若變量值中有空格稳析,則打印時(shí)使用"$變量名"
字符串賦值時(shí)酝润,若值中有空格祟绊,用""括起來
變量名="hello world"
$引用變量楼入,不能夠把" "一起引用哥捕,因此打印時(shí),需用"$變量名"
1.字符串
(1)字符串的拼接
引用字符串的值嘉熊,并將多個(gè)字符串的值作為新的字符串付給新的變量遥赚,即:str="$string1 $string2"
(2)字符串的長度
lenth=${#string}
- 此時(shí)#不是注釋,表示計(jì)算字符串的長度
(3)字符串的分割
nstr=${string:a:b}
把字符串string從第a個(gè)之后開始截取b個(gè)字符阐肤,賦給新的變量
2.只讀readonly
num=34
echo $num
num=88 #錯(cuò)誤(error)
echo $sum
只讀變量的值無法修改Y旆稹!孕惜!
3.清除變量的值
num=333
echo $num
unset num
echo $num
- 注意:unset是清除變量的值愧薛。若變量未定義直接使用,其值為空
4.再次強(qiáng)調(diào)
(1)shell程序必須指定腳本的解釋程序
- 在shell腳本程序的第一行必須是:#!/bin/bash
(2)空格問題
- 變量賦值時(shí)衫画,=兩邊不可有空格其他情況:盡量加空格
5.權(quán)限問題
sudo chmod a+x filename 所有用戶
sudo chmod u+x,g+x filename 使用者和所在的組
sudo chmod +x filename 所有用戶
sudo chmod 777 filename 所有權(quán)限
6.從鍵盤獲取變量值
read:在沒有輸入時(shí)毫炉,則一直等待輸入、
read 變量1 變量2 變量3(此情況削罩,將輸入的第一個(gè)值賦給變量1瞄勾,第二個(gè)值給變量2,剩余的值全部給變量3)
不建議使用:
read num1 num2 num3...
建議:
read num1
read num2
read numn
7.shell的三大語句
功能型語句弥激、說明型語句进陡、結(jié)構(gòu)分支語句
(1)說明型語句
以#開頭的語句,至行未均為說明型語句微服,說明型語句不解釋執(zhí)行(整行)即注釋
說明型語句的位置可以程序中的任何位置四濒,可以放在解釋執(zhí)行語句之后,從#開始的部分到行末(只能注釋一行)
(2)功能型語句
系統(tǒng)命令职辨,自寫程序....
(3)結(jié)構(gòu)型語句
多露分支語句,循環(huán)語句戈二,循環(huán)控制語句舒裤,測試語句,條件語句觉吭,結(jié)構(gòu)型語句
8.加腾供,減,乘鲜滩,除伴鳖,取余(整數(shù))
expr let:針對整數(shù)做簡單的加、減徙硅、乘榜聂、除、取余(整數(shù))
expr:
sum=`expr $sum + $sum1`
sum1=`expr $sum \* $sum1`
let:
let sum=num+num1
let sum1=num\*num1
乘法*:\是去掉的元意嗓蘑,告訴我們解釋器這是真的乘法P胨痢匿乃!
:取得結(jié)果集*
$( ):取得結(jié)果集
9.條件測試語句
test 測試語句
[ 條件測試語句 ]:注意[ ]中的空格!豌汇!
文件測試:
-e file:測試file時(shí)候存在
-d file:ceshifile是否是目錄
-f file:測試file是否是文件
-r file:測試file是否可讀
-w file:測試file是否可寫
-x file:測試file是否可執(zhí)行
算數(shù)比較運(yùn)算符:
-eq:是否
-ne:是否不等
-gt:是否大于
-ge:是否大于等于
-lt:是否小于
-le:是否小于等于
字符串比較:
-z string:string長度是否為零
-n string:若string非零幢炸,為真
string=string1:是否相同
string!=string1:是否不同
邏輯操作符:
&&:邏輯與
事件1 && 事件2:當(dāng)事件1和事件2都為真拒贱,則為真
||:邏輯或
當(dāng)事件1 || 事件2:當(dāng)事件1或事件2為真宛徊,則為真
-a:and
-o:or
常見變量:
$?:命令執(zhí)行后的返回狀態(tài),返回零表示執(zhí)行成功
$*:所有參數(shù)列表
$@:所有參數(shù)列表
$#:傳遞到腳本的參數(shù)個(gè)數(shù)
$0:可執(zhí)行命令本身逻澳,不是位置參數(shù)
$1~$n:分別表示第一個(gè)至第n個(gè)位置參數(shù)
echo -n:不換行輸出!
10.if語句
(1)語法機(jī)構(gòu)
if [ 條件 ]
then
命令
fi
或者
if [ 條件 ]
then
命令
elif
[ 命令 ]
then
命令
else
命令
fi
若表達(dá)式為真闸天,則執(zhí)行命令表1中的命令,退出if語句赡盘;否則執(zhí)行命令表2中的語句if
(3)case語句的用法:
test命令測試的條件成立時(shí)号枕,命令返回值為真,否則返回值為假
方式一:
test $name -eq $1
echo $?
方式二:
if test -f $filename
then
...
fi
方式三:
if [ -f $filename ]
then
...
fi
10.case...esac
多路分支語句case用于多重條件測試陨享,語法結(jié)構(gòu)清晰自然葱淳,語法結(jié)構(gòu)為:
case 字符串變量 in #case語句只能檢測字符串變量
語句結(jié)構(gòu):
模式1)(各模式中可用文件名元字符,以右括號結(jié)束)
命令表1;;(命令表以單獨(dú)的雙分號行結(jié)束抛姑,退出case語句)
模式2)
命令表2;;
...
模式n)
命令表n;;
esac
還可以指定以下字符串集合:
| 多重選擇
? 任意一個(gè)字符
* 任意多個(gè)字符
[ a-z ] a至z之間的任意字符
11.for 循環(huán)
for...do...done
當(dāng)循環(huán)次數(shù)確定時(shí)赞厕,使用for循環(huán)語句來多次執(zhí)行一條或一組命令,循環(huán)體由語句括號do和done來限定定硝。
格式為:
for 變量名 in 值列表
do
命令
done
變量名以此獲取單詞表中的各個(gè)單詞皿桑,每取一次值,就執(zhí)行一次蔬啡。
循環(huán)體中的命令诲侮,循環(huán)次數(shù)由值列表中的單詞數(shù)確定,命令表中的命令可以是一條箱蟆,也可以是由分號或者換行符分開的多條沟绪。
若單詞表是由命令行上的所有位置的參數(shù)時(shí),可以在for語句中省略“in 單詞表”部分空猜!
方法二:
for(i=0;i<10;++i)
注意:
for循環(huán)值列表可以省略绽慈,默認(rèn)從輸入?yún)?shù)中獲取
12.while
語法結(jié)構(gòu):
while 條件或命令表達(dá)式
do
命令
done
while語句首先測試其后的命令或者表達(dá)式的值,如果為真辈毯,就執(zhí)行一次坝疼。
循環(huán)體中的命令,然后在測試該命令或表達(dá)式的值谆沃,執(zhí)行循環(huán)體钝凶,直到該命令或表達(dá)式為假時(shí)退出循環(huán)。
while語句的退出狀態(tài)為命令表中被執(zhí)行的最后一條唁影。
13.break和continue
break n(跳出n層)
continue語句則馬上轉(zhuǎn)到最近一層循環(huán)語句的下一輪循環(huán)上腿椎。
continue n(跳轉(zhuǎn)到最近n層循環(huán)語句的下一輪循環(huán)上)桌硫。
課后作業(yè)
作業(yè):(待完成...)
1.使用while循環(huán)實(shí)現(xiàn)九九乘法表
2.for或者while實(shí)現(xiàn)打印等腰三角形,行數(shù)由用戶輸入
3.寫一個(gè)腳本啃炸,判斷給定目錄下的文件屬性
4.預(yù)習(xí)C語言課本前三四五章铆隘,下周進(jìn)入C部分的學(xué)習(xí)