linux shell 常用基本语法
轉(zhuǎn)自網(wǎng)絡(luò),真正來源不詳。。。。
?
一. Linux基本命令
1.1. ?cp命令
該命令的功能是將給出的文件或目錄拷貝到另一文件或目錄中,功能十分強(qiáng)大。
語法: cp [選項(xiàng)] 源文件或目錄 目標(biāo)文件或目錄
?
1.2. mv命令
用戶可以使用mv命令來為文件或目錄改名或?qū)⑽募梢粋€(gè)目錄移入另一個(gè)目錄中。
語法:mv [選項(xiàng)] 源文件或目錄 目標(biāo)文件或目錄
?
1.3. rm命令
用戶可以用rm命令刪除不需要的文件或者目錄。
語法:rm [選項(xiàng)] 文件
如果沒有使用- r選項(xiàng),則rm不會(huì)刪除目錄。
?
1.4. mkdir和rmdir
語法:mkdir [選項(xiàng)] dir-name
語法:rmdir [選項(xiàng)] dir-name
?
1.5. cd 命令
功能:改變工作目錄。
語法:cd [directory]
?
1.6. ls 命令
ls是英文單詞list的簡(jiǎn)寫,其功能為列出目錄的內(nèi)容。該命令類似于DOS下的dir命令。
語法:ls [選項(xiàng)] [目錄或是文件]
?
1.7. su命令
這個(gè)命令非常重要。它可以讓一個(gè)普通用戶擁有超級(jí)用戶或其他用戶的權(quán)限,也可以讓超級(jí)用戶以普通用戶的身份做一些事情。普通用戶使用這個(gè)命令時(shí)必須有超級(jí)用戶或其他用戶的口令。
?該命令的一般形式為: su [選項(xiàng)] [使用者帳號(hào)]
?
1.8. ps命令
顯示系統(tǒng)中執(zhí)行的程序。
語法:ps [選項(xiàng)]
?
1.9. kill命令
刪除執(zhí)行中的程序
語法:kill [選項(xiàng)] PID
?
1.10. grep命令
搜尋輸出的特定文字
語法:grep 字符串
例:
ps aux | grep matlab
kill PID
?
1.11. echo命令
echo命令的功能是在顯示器上顯示一段文字,一般起到一個(gè)提示的作用。
該命令的一般格式為: echo [ -n ] 字符串
?
1.12. clear命令
clear命令的功能是清除屏幕上的信息,它類似于DOS中的 cls命令。清屏后,提示符移動(dòng)到屏幕左上角。
?
?
二. Shell的基本知識(shí)
?
2.1. shell提示符及其環(huán)境
提示符:$
環(huán)境:Linux,Unix,Dos等等
? Shell其實(shí)就是一個(gè)解釋執(zhí)行命令的程序,所謂shell編程其實(shí)就是用一定的語法將各種基本的命令組合起來,讓shell程序去解釋執(zhí)行。
?
同傳統(tǒng)的編程語言一樣,shell提供了很多特性,這些特性可以使你的shell script編程更為有用,如:數(shù)據(jù)變量、參數(shù)傳遞、判斷、流程控制、數(shù)據(jù)輸入和輸出,子程序及以中斷處理等。
?
2.2 如何執(zhí)行shell程序
Shell程序(***.sh)
? 執(zhí)行這個(gè)命令時(shí)
(1) #./***.sh
(2) #chmod u+x ***.sh
#***.sh
(3) #sh ***.sh
?
2.3 常量
? 字符串,例如“Hello World!”。
? 數(shù)字,例如705,23。
?
2.4 變量
shell編程中它們是沒有類型的,簡(jiǎn)稱弱類型編程語言,在這個(gè)變量中可以保含一個(gè)數(shù)字,一個(gè)字符串,一個(gè)單詞等。你并不需要聲明這個(gè)變量,它會(huì)在引用這個(gè)變量時(shí)創(chuàng)建它。
STR="Hello World!"
echo $STR
?
HOME="/home"??????????????? //注意賦值不要有空格
a=123
HOME_LIST=$(ls /home) //把命令的執(zhí)行結(jié)果賦值給變量
ehco $HOME?????????????????? //$ 符號(hào)是獲得變量HOME的值
a=a+1
系統(tǒng)變量:
$0 這個(gè)程序的執(zhí)行名字
$n 這個(gè)程序的第n個(gè)參數(shù)值,n=1...9
$* 這個(gè)程序的所有參數(shù)
$# 這個(gè)程序的參數(shù)個(gè)數(shù)
$$ 這個(gè)程序的PID
$! 執(zhí)行上一個(gè)背景指令的PID
$? 上一個(gè)指令的返回值
?
?
2.5 局部變量
局部變量一般是指寫在函數(shù)中的變量,他的生命力是有限的。局部變量比較好理解,這里就不再多介紹了。
?
2.6 從鍵盤輸入變量值
使用read命令
read var1 var2 … varn
?
2.7 注釋
?Shell編程中的注釋以#開頭
?
2.8 數(shù)字運(yùn)算
主要是指整數(shù)運(yùn)算。expr命令可以將字符型變量轉(zhuǎn)換為整數(shù)進(jìn)行操作
?
語法:expr integer operator integer
其中operator為+ - * / %, 但對(duì)*的使用要用轉(zhuǎn)義符/,如:
?
[oracle@localhost ~]$ more dvd.sh
#!/bin/bash
expr 5 /* 5
[oracle@localhost ~]$ sh dvd.sh
25
?
2.9 邏輯運(yùn)算
test進(jìn)行邏輯運(yùn)算,用[ ]括起來就是test運(yùn)算
?
int1 -eq int2 相等?
int1 -ne int2 不等?
int1 -gt int2 int1 > int2 ?
int1 -ge int2 int1 >= int2 ?
int1 -lt int2 int1 < int2 ?
int1 -le int2 int1 <= int2
?
2.10 雙引號(hào)及單引號(hào)
?
?$echo "$HOME $PATH"? -- 顯示變量值
/home/hbwork opt/kde/bin:/usr/local/bin:
?$echo '$HOME $PATH'? -- 顯示單引號(hào)里的內(nèi)容
$HOME $PATH
?
2.11 空格
由于shell對(duì)命令中的多余的空格不作任何處理 ,而用引號(hào)括起來則可以防止shell去掉這些空格。
?
$ str1=abcd
$ str2="abcd "
?
?
?
2.12??????? 分支結(jié)構(gòu)
?
2.12.1 結(jié)構(gòu)一
if [ variable = value ]
then
command
else
if [ variable = value ]
then
command
else
command
fi
?
2.12.2 結(jié)構(gòu)二
if [ variable = value ]
then
command
elif [ variable = value ]
then
command
fi
?
if 語句示例:
if [ "22" -lt "33" ]?? then?? //注意空格
echo "22 less than 33"
else
echo "no"
fi????????????????????????????????? //if語句的結(jié)束
?
?
2.13 Case語句
?
case value in
pattern1)
command;;
pattern2)
command;;
...
patternn)
command;
esac
?
case 示例:
?
echo "enter a number"
read ans??????????????????? //讀取一個(gè)變量read
case $ans in
1)
echo?? "you numer is $ans"
;;??????????????????????????????? //注意符號(hào)是兩個(gè) ;
2)
echo "you number is 2"
;;
[3-9])
echo "you number is $ans"
;;
*)?????????????????????????????????? //*通配符
echo "others"
esac
?
2.14 And 和 Or
command1 && command2
? command1 || command2
?
2.15 循環(huán)語句
?
2.15.1 For循環(huán)
?
for var in arg1 arg2 ... argn
do
command
....
command
done
?
?
For循環(huán)示例
int=1
for $int in 1 2 3 4 5
do
sq=`expr $int /* $int`
echo $sq
int=`expr $int + 1`
done
?
2.15.2 while循環(huán)
?
while command
do
command
command
command
...
Done
?
?
While循環(huán)的示例
?
int=1
while [ $int -le 5 ]
do
sq=`expr $int /* $int`
echo $sq
int=`expr $int + 1`
done
?
?
2.15.3 until循環(huán)結(jié)構(gòu)
?
until command
do
command
command
....
command
done
?
Until循環(huán)示例
? int=1
until [ $int -gt 5 ]
do
sq=`expr $int /* $int`
echo $sq
int=`expr $int + 1`
done
?
?
2.16 從循環(huán)中退出: break和continue命令
break 立即退出循環(huán)
continue 忽略本循環(huán)中的其他命令,繼續(xù)下一下循環(huán)
?
?
2.17 函數(shù) (子過程)
funcname()
{
command
...
command; #分號(hào)
}
?
?
函數(shù)示例
setup ()
{ command list ; }
do_data ()
{ command list ; }
setup
do_data
?
2.18? shell程序的調(diào)試
? 使用-x進(jìn)行跟蹤執(zhí)行,執(zhí)行并顯示每一條指令。
?
?
2.19 比較運(yùn)算符
?
2.19.1 文件比較運(yùn)算符
-e filename??????? 如果 filename 存在,則為真??????????? [ -e /var/log/syslog ]
-d filename?????? 如果 filename 為目錄,則為真?????? [ -d /tmp/mydir ]
-f filename??????? 如果 filename 為常規(guī)文件,則為真 [ -f /usr/bin/grep ]
-L filename??????? 如果 filename 為符號(hào)鏈接,則為真?? [ -L /usr/bin/grep ]
-r filename????????? 如果 filename 可讀,則為真????????????? [ -r /var/log/syslog ]
-w filename??????? 如果 filename 可寫,則為真??????????? [ -w /var/mytmp.txt ]
-x filename???????? 如果 filename 可執(zhí)行,則為真?????????? [ -L /usr/bin/grep ]
?
filename1 -nt filename2 如果 filename1 比 filename2 新,則為真 [ /tmp/install/etc/services -nt /etc/services ]
filename1 -ot filename2 如果 filename1 比 filename2 舊,則為真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]
2.19.2 字符串比較運(yùn)算符 (請(qǐng)注意引號(hào)的使用,這是防止空格擾亂代碼的好方法)
-z string?????????????? 如果 string 長(zhǎng)度為零,則為真????????? [ -z "$myvar" ]
-n string????????????? 如果 string 長(zhǎng)度非零,則為真?????????????? [ -n "$myvar" ]
string1 = string2 如果 string1 與 string2 相同,則為真 [ "$myvar" = "one two three" ]
string1 != string2 如果 string1 與 string2 不同,則為真 [ "$myvar" != "one two three" ]
2.19.3 算術(shù)比較運(yùn)算符
num1 -eq num2???????????????? 等于??????????????????????????? [ 3 -eq $mynum ]
num1 -ne num2??????????????? 不等于???????????????????????? [ 3 -ne $mynum ]
num1 -lt num2??????????????????? 小于??????????????????????????? [ 3 -lt $mynum ]
num1 -le num2????????????? 小于或等于?????????????????????? [ 3 -le $mynum ]
num1 -gt num2??????????????????? 大于??????????????????????????? [ 3 -gt $mynum ]
num1 -ge num2?????????????? 大于或等于???????????????????? [ 3 -ge $mynum ]
?
?
三. Shell 的一些注意事項(xiàng)
?
3.1. 基礎(chǔ)
#!/bin/bash?? //bash腳本第一句都是這個(gè),他會(huì)讓系統(tǒng)指定以bash來解釋這個(gè)腳本
#???????????????? //shell腳本注釋符號(hào)
?
3.2. 變量
變量賦值的時(shí)候"="兩邊的內(nèi)容要緊靠"="
例如:sum=0,寫java寫的時(shí)間長(zhǎng)了總喜歡寫成sum = 0,但是這樣的結(jié)果是編輯器不識(shí)別
3.3. 在使用if、while時(shí),在注意變量與符號(hào)之間的分割
例如:if [ `expr $a % 3` -ne 0 ],while [ "$var" != "end" ],盡量分開寫,這樣也挺好看也便于識(shí)別。
?
3.4.? let的意思是讓"="后面的內(nèi)容做算術(shù)運(yùn)算,例如:let x=a-b
?
3.5. 大多數(shù)情況下,可以使用測(cè)試命令來對(duì)條件進(jìn)行測(cè)試,比如可以比較字符串、判斷文件是否存在及是否可讀等等……通常用" [ ] "來表示條件測(cè)試,注意這里的空格很重要,要確保方括號(hào)前后的空格。
?
[ -f "somefile" ] :判斷是否是一個(gè)文件
[ -x "/bin/ls" ] :判斷/bin/ls是否存在并有可執(zhí)行權(quán)限
[ -n "$var" ] :判斷$var變量是否有值
[ "$a" = "$b" ] :判斷$a和$b是否相等
?
3.6 幾個(gè)簡(jiǎn)單例子
for filename in $(ls)
do
cat $filename
done
?
for((i=0; i<10; i++))
do
echo $i
done
?
x=1
sum=0
while [ $x -le 10 ] ?//注意[ ] 兩邊的空格
do
let sum=sum+$x?? //shell中算術(shù)計(jì)算使用let
let x=x+1
done
echo $sum
轉(zhuǎn)載于:https://www.cnblogs.com/acSzz/p/5450200.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的linux shell 常用基本语法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Web SQL Database 之 S
- 下一篇: 20150309+Linux+LAMP安