Linux命令行和Shell腳本編程(一)

 一、Linux命令行

1.1 常用命令

echo -n "hello" #不換行
echo -e "hello\nworld"
head -n2 data.txt
tail -n2 data.txt
ping 127.0.0.1 > ping.log & #置於後臺運行
jobs #查看後臺作業
fg #移置前臺運行
which command #查看可執行文件的位置
find . -name "*.c"
df -h #顯示磁盤使用情況
du -sh #顯示當前文件夾的大小
ln -s data.txt link
ln data.txt link
date #顯示當前日期和時間
wc file #統計file的行數,單詞數和字節數
wc -c file #只統計file字節數
wc -l file #只統計file行數
ps -ef #顯示當前所有進程
ps -aux #顯示所有包含其它使用的進程
top #顯示系統正在執行進程的相關信息,包括進程ID、內存佔用率、CPU佔用率等
kill -9 PID #強制結束進程
killall command
free #顯示系統內存使用情況
tar cvf file.tar file/
tar xvf file.tar
zip file.zip file/*
unzip file.zip
alias today='date +"%A, %B %-d, %Y"'
unalias today

1.2 快捷鍵 

ctrl a:將光標移至行首
ctrl b:將光標向行首移動一格
ctrl e:將光標移至行尾
ctrl f:將光標向行尾移動一格

ctrl l:清屏
shift PageUp:向上翻頁
shift PageDown:向下翻頁

ctrl d:刪除光標處字符/命令行沒有字符則關閉shell會話
ctrl w:刪除光標處向行首的單詞
ctrl k:從光標位置剪切/刪除至行尾
ctrl u:從光標位置剪切/刪除至行首
ctrl y:在光標位置粘貼

1.3 零碎知識

1.3.1 Linux中單引號和雙引號的區別

單引號用於保留字符的字面含義,各種特殊字符在單引號裏面,都會變爲普通字符

雙引號比單引號寬鬆,可以保留大部分特殊字符的本來含義,但是三個字符除外:美元符號($)、反引號(`)和反斜槓(\)

1.3.2 重定向輸入輸出

command > demoFile:替換

command >> demoFile:追加

command < demoFile:輸入重定向

command << EOF:內聯輸入重定向,EOF表示結束符

二、Shell腳本編程

2.1 基本腳本示例

#!/bin/bash

echo $HOME
var1=1
var2=$(echo 3)
echo $var1,$var2

環境變量:env或printenv命令顯示當前所有的環境變量,export命令用於設置/更改環境變量

用戶變量:由字母、數字、下劃線組成的字符串,區分大小寫,等號兩邊不能出現空格

命令替換:將命令的輸出賦給變量,兩種形式,一種是反引號`command`,一種是$(command)

注意:命令替換會創建子shell來執行command,所以command中是無法使用腳本中所創建的變量的

數學運算:形式:$[ operation ]

注意:只支持整數運算,如$[4/3]會得到1

bc:使用命令替換和管道實現浮點運算,scale是計算結果保留的小數位數,默認是0,所以計算之前要先進行賦值

var1=$(echo “scale=4; 3.44 / 5” | bc)

如果有大量計算可以使用內聯輸入重定向

var=$(bc << EOF
scale=4
a = ($var1 * $var2)
b = ($var3 * $var4)
a + b
EOF
)

運行腳本:

chmod u+x newfile #u代表用戶,g代表組,o代表其他,a代表所有以上
chmod 755 newfile
./newfile

退出腳本:

$?:上個執行命令的退出狀態碼

退出狀態碼是一個0~255的整數值,執行成功返回0,執行錯誤則返回正數值

使用exit命令允許你在腳本結束時指定一個退出狀態碼

shell腳本默認會以腳本中最後一個命令的退出狀態碼退出

2.1 條件語句if

if command
then
commands
fi
if command;then
commands
fi

執行command,如果command執行成功,即退出狀態碼爲0,則繼續執行commands,否則不執行 

if command
then
commands1
else
commands2
fi
if command;then
commands1
else
commands2
fi

執行command,如果command執行成功,即退出狀態碼爲0,則執行commands1,否則執行commands2 

if command1
then
commands
elif command2
then
more commands
fi
if command1;then
commands
elif command2;then
more commands
fi

執行command1,如果command執行成功,即退出狀態碼爲0,則執行commands,否則執行command2,如果command2執行成功,則執行more commands 

if [ condition ]
then
commands
fi
if [ condition ];then
commands
fi

注意:第一個方括號之後和第二個方括號之前必須都加上一個空格,[  ]支持三類條件判斷:

  • 數值比較
  • 字符串比較
  • 文件比較 

注意:字符串比較
大於號和小於號必須轉義,否則shell會把它們當作重定向符號,把字符串值當作文件名
大於和小於順序和sort命令所採用的不同。在比較測試中,大寫字母被認爲是小於小寫字母的。但sort命令恰好相反

 複合條件判斷:兩種布爾運算符

[ condition1 ] && [ condition2 ]
[ condition1 ] || [ condition2 ]

if-then 的高級特性:
用於數學表達式的雙括號 (( expression ))

用於高級字符串處理功能的雙方括號 [[ expression ]] ,提供正則判斷功能

2.2 case語句

case variable in  
pattern1 | pattern2) commands1;;  
pattern3) commands2;;  
*) default commands;;  
esac 

case命令會將變量variable與不同模式進行比較。如果變量和模式是匹配的,那麼shell會執行該模式指定的命令。

可以通過豎線操作符在一行中分隔出多個模式模式。

星號會捕獲所有與已知模式不匹配的值。

三、高級Shell腳本編程

Linux命令行和Shell腳本編程(二)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章