1字符串的拼接
引用字符串的值,并將多個字符串的值作為新的字符串賦給新變量,即
str="$string1 $string2"
2字符串的長度
lenth=${#string}
注意:此時的#不在是注釋,表示計算字符的長度
3字符串的分割
nstr=${string:a:b}
把字符串string從第a個之后開始截取b個字符,賦給新的變量
4只讀:readonly
num=34
echo $num
只讀變量的值不可修改
5.清除變量的值
num=333
echo $num
unset $num
echo $num
注意:
unset是清除變量的值
若變量未定義直接使用,其值為空
4在此強調(diào)
shell程序必須指定腳本的解釋程序,即
在shell腳本程序的第一行必須是:
!/bin/bash
2空格問題
變量賦值時,等號(=)兩邊不可有空格
字符串的空格問題
其他情況:
盡量加空格
權(quán)限問題
sudo chmod a+x 文件名
sudo chmod u+x 文件名
sudo chmod 777 文件名
從鍵盤獲取變量的值
read: 在沒有輸入時,則一直等待輸入
read 變量1 變量2 變量3
此情況,將輸入的第一個變量的值賦給變量1,第二個給變量2,
剩余的值全部給變量3
不建議使用read num1 num2 num3... 這種
建議使用:
read num1
read num2
read nun3
shell的三大語句
功能性語句,說明3性語句,結(jié)構(gòu)分支語句
(1)說明性語句
以#號開頭的語句,至行末均為說明性語句
,說明性語句不解釋執(zhí)行,(整行)即注釋
說明性語句的位置可以程序中的任何位置,可以放在解釋語句之后,從#開始的部分到末行
(#) 井號只能注釋一行
(2)功能性語句
系統(tǒng)
(3)結(jié)構(gòu)型語句
多路分支語句,循環(huán)語句,循環(huán)控制語句,測試語句,條件語句
結(jié)構(gòu)型語句
加(+),減(-),乘(*),除(/),取余(%)(整數(shù))
expr let:針對整數(shù)做簡單的加,減,乘,除
sum= expr $num + $num1
sum1=expr $num \* $num1
sum=$(expr $num + $num1)
sum=$(expr $num*$num1)
let:
let sum=num+num1
let sum1=num*num1
乘法*:\是去掉*的元意,告訴解釋器這真的是乘法
``:取得結(jié)果集
$():取得結(jié)果集
二者結(jié)果相同
條件測試語句
(1) test 測試語句
(2)【條件測試語句】 :注意【】中的空格!!!!
-e 文件 :測試文件時候存在
-d 文件: 測試文件是否是目錄
-f 文件: 測試文件是否是文件
-r 文件 :測試文件是否可讀
-w 文件:測試文件是否可寫
-x文件: 測試文件是否可執(zhí)行
整數(shù)測試:
-eq: 相等
-ne:不等于
-gt:大于
-ge:大于或等于
-lt:小于
-le: 小于或等于
字符串比較:
-z string:string長度是否為零
-n string:若string非零,為真
string=string1:是否相同
邏輯操作符:
&&:邏輯與
事件1 &&事件2:事件1和事件2都為真,則為真
||:邏輯或
事件1 || 事件2
-a: and
-o:or
常見的變量:
$?:命令執(zhí)行后的返回狀態(tài),
$*:所有參數(shù)列表
$@:所有參數(shù)列表
$#:傳遞到腳本的參數(shù)個數(shù)
$0:可執(zhí)行命令本身,不是定位參數(shù)
$1~$n:分別表示第一個至第n個位置參數(shù)
$1~$n:分別表示第一個至第n個位置參數(shù)
echo -n :不換行輸出!
if語句
(1)
if【條件】
then
命令
fi
(2)
if【 條件 】
then
命令
elif 【 條件 】
then
命令
else
命令
fi
若表達式為真,則執(zhí)行命令表1中的命令,退出if語句;
否則執(zhí)行命令表2中的語句退出if;
(3)test 語句的用法:
test命令測試的條件成立時,命令返回為真,否則返回值為假
方式一:
test $name -eq $1
echo $?
方式二:
if test -f $filename
then
......
fi
方式三:
if【-f $filename】
then
......
fi
case ...esac
多路分支語句case用于多重條件測試,語法結(jié)構(gòu)清晰自然
語法結(jié)構(gòu)為:
case 字符串變量 in #case 語句只能檢測字符串變量模式
模式 1)#個模式中可用文件名元字符,以右括號結(jié)束命令表一
;;#命令表以單獨的雙分號結(jié)束,退出case語句
模式2)
命令表2
;;
......
模式 n)#模式n常寫為字符*,表示所有其他模式
命令表n
;;
最后一個分號行可以省略
#
esac
for 循環(huán)
for...do...done
當(dāng)循環(huán)次數(shù)確定時,使用for循環(huán)語句來執(zhí)行一條或一組命令
循環(huán)體由語句括號do和done來限定
格式為:
for 變量名 in 單詞表
do
命令表
done
變量名依次取單詞表中的各個單詞,每取一次單詞,就依次執(zhí)行一次
循環(huán)體中的命令,循環(huán)次數(shù)由單詞表中的單詞數(shù)量確定,命令表中的命令可以是一條
也可以是由分好或換行符分開的多條
若單詞表是命令行上的所有位置的參數(shù)時,可以在for語句中省略
“in 單詞表”部分
方法二:
for((i=0;i<10;++i))
注意:
for循環(huán)值列表可以省略,默認從輸入?yún)?shù)中獲取