1. 程式人生 > >linux簡單命令與Shell腳本

linux簡單命令與Shell腳本

chmod 返回 只讀 其他 後退 追加 名稱 文件和目錄 進程id

說明
1、#表示root用戶登錄,$表示普通用戶登錄
2、|符號是管道符,用於把|前的輸出作為後面命令的輸入
3、>表示追加並覆蓋的意思
4、>>兩個大於符號,表示追加

命令
1、cd命令:切換目錄
cd /home 進入/home目錄
cd ../返回上一級目錄
cd ./當前目錄
2、ls命令:產看文件及目錄
ls ./ 查看當前目錄所有的文件和目錄
ls -a 查看所有的文件,包括隱藏文件,以.開頭的文件
ls -l 查看某個文件或者目錄的權限,它以顯示數據的第一個字段為準,第一個字段由10個自負組成
[root@node1 ~]# ls -l monitor_log.sh
-rw-r--r-- 1 root root 91 May 7 20:21 monitor_log.sh

第一位表示文件類型,-表示文件,d表示目錄;後面每三位為一組。
第一組:2-4位表示文件所有者的權限,即用戶user權限,簡稱u
第二組:5-7位表示文件所有者所屬組成員的權限,group權限,簡稱g
第三組:8-10位表示所有者所屬組之外的用戶的權限,other權限,簡稱o
rwx權限可以用數字來表示,分別表示為r(4)、w(2)、x(1)
3、pwd命令:顯示當前所在的目錄
4、mkdir:創建目錄
mkdir test ,命令後接目錄的名稱
5、rmdir:刪除空目錄
6、rm:刪除文件或目錄
rm –rf test.txt (-r表示遞歸,-f表示強制)
7、cp:拷貝文件
cp old.txt /tmp/new.txt
如果拷貝目錄需要加 –r參數
8、mv:重命名或移動文件或目錄
mv old.txt new.txt
9、touch:創建文件
touch test.txt 如果文件存在,則表示修改當前文件時間
10、Useradd:創建用戶
useradd jpc,userdel刪除用戶
11、Groupadd:創建組
groupadd jpc1,groupdel刪除組
12、find:查找文件或目錄
find /home -name "test.txt"
find 後接查找的目錄,-name指定需要查找的文件名稱,名稱可以使用*表示所有
find /home -name “*.txt” ;查找/home目錄下,所有以.txt結尾的文件或者目錄
13、cat:查看文件內容
cat test.txt 可以看到test.txt內容
14、more:查看文件內容
分頁查看,cat是全部查看,如果篇幅較多只能看到最後的篇幅
可以配合cat使用:
cat test.txt|more 分頁顯示text內容
15、echo:回顯
echo ok 顯示ok,輸出什麽打印什麽
echo ok > test.txt 把ok字符覆蓋test.txt的內容,>表示追加並覆蓋的意思
echo ok >> test.txt 表示向test.txt文件追加OK字符,不覆蓋原文件裏的內容
16、chown 改變某個文件的所有者或者所屬的組
chown -R test:test monitor_log.sh

vi操作
命令行模式:vi默認打開就是命令行模式
文本輸入模式:命令行模式下按i進入文本輸入模式,按esc進入命令模式,
末行模式:命令行模式按:進入末行模式
:wq表示保存退出
:q!不保存退出



Shell腳本
Bourne Again Shell(/bin/bash)
1、運行腳本:
作為可執行程序
需要在第一行指定解釋器 #!/bin/bash
將代碼保存到test.sh
chmod +x ./test.sh #使腳本具有執行權限
./test.sh #執行腳本
作為解釋器參數
/bin/sh test.sh
/bin/php test.php
2、Shell變量
(1)定義變量時,變量名布甲美元符號($,php語言中變量需要)
you_name="jpc"
變量名和等號之間不能有空格
首字符必須字母
中間不能有空格,可以下劃線
不能使用符號
不能使用bash裏的關鍵字(可用help命令查看保留關鍵字)
(2)使用變量,只用在變量名前加美元符號即可
you_name="jpc"
echo $you_name
echo ${you_name}
花括號可不寫,為了幫助解釋器識別變量的邊界
(3)只讀變量,使用readonly命令講變量定義為只讀變量
#!/bin/bash
myUrl="http://www.w3cschool.cc"
readonly myUrl
(4)刪除變量,使用unset命令刪除變量
unset variable_name
unset命令不能刪除只讀變量
(5)變量類型
局部變量:在腳本或命令中定義,僅在當前shell實例中有效,其他shell啟動的程序不能訪問局部變量
環境變量:所有的程序,包括shell啟動的程序,都能訪問環境變量,有些程序需要環境變量來保證其正常運行。必要時,shell腳本也可以定義環境變量
shell變量:shell變量是由shell程序設置的特殊變量,shell變量中有一部分是環境變量,有一部分是局部變量,這些變量保證了shell的正常運行
(6)Shell字符串
可用單引號,雙引號,也可以不用引號
單引號:
單引號裏的任何字符都會原樣輸出,單引號字符中的變量是無效的
單引號字符串中布恩那個出現單引號(對單引號使用轉義字符後也不行)
雙引號:
雙引號裏可以有變量
雙引號裏可以出現轉義字符
拼接字符串
you_name="jpc"
greeting="hello,"$you_name"!"
greeting_1="hello,${you_name}!"
echo $greeting $greeting_1
獲取字符串長度
string="abcd"
echo ${#string} #輸出4
提取字符串
string="runoob is a great site"
echo ${string:1:4} # 輸出unoo
從第二個字符開始截取四個字符
查找子字符串
查找字符“i或s”的位置
string="runoob is a great company"
echo `expr index "$string" is` #輸出8
`是反引號(英文輸入法左上角)
(7)Shell數組
bash僅支持一維數組,沒限定數組的大小
定義數組
括號表示數組,數組元素用空格隔開
數組名=(值1 值2 值3 ... 值n)
也可單獨定義數組的各分量
可以不使用連續的下標,而且下標的範圍沒有限制
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
讀取數組
#{數組名[下標]}
使用@符號可以獲取數組中的所有元素
#{數組名[@]}
獲取數組的長度
獲取數組長度的方法與獲取字符串長度的方法想通
# 取得數組元素的個數
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得數組單個元素的長度
lengthn=${#array_name[n]}
(8)Shell註釋
以“#”開頭的行就是註釋,會被解釋器忽略
sh裏無多行註釋
3、Shell傳遞參數
可以在執行Shell腳本時,向腳本傳遞參數,腳本內獲取參數的格式為$n n表示一個數字,1為執行腳本的第一個參數,2第二
$0為執行的文件名
$# 傳遞到腳本的參數個數
$* 以一個單字符串顯示所有向腳本傳遞的參數
如"$*"用"括起來的情況,以"$1 $2"形式輸出所有參數
$$ 腳本運行的當前進程ID號
$! 後臺運行的最後一個進程的ID號
$@ 與$*相同,但是使用時加引號,並在引號中返回每個參數
如"$@"用"括起來的情況,以"$1" "$2"形式輸出所有參數
$- 顯示Shell使用的當前選項,與set命令功能相同
$? 顯示最後命令的退出狀態,0表示沒有錯誤,其他任何值都表明有錯誤
4、Shell運算符
算數運算符、關系運算符、布爾運算符、字符串運算符、文件測試運算符
原生bash不支持簡單的數學運算,通過expr來實現
兩個數相加
#!/bin/bash
val=`expr 2 + 2`
echo "兩數之和為:$val"
註意:
表達式和運算符之間要有空格
完整的表達式要被``包含,反引號
算術運算符
其他類似上述加法,用反引號包含
條件表達式要放在方括號之間,並且要有空格
例如: [$a==$b] 是錯誤的,必須寫成 [ $a == $b ]
關系運算符
關系運算符只支持數字,不支持字符串,除非字符串的值是數字
-eq 檢測兩個數是否相等,相等返回true
-ne 檢測兩個數是否相等,不相等返回true
-gt 檢測左邊的數是否大於右邊的
-lt 檢測左邊的數是否小於右邊的
-ge 檢測左邊的數是否大於等於右邊的
-le 檢測左邊的數是否小於等於右邊的
布爾運算符
!非運算,表達式為true返回false
-o 或運算,有一個表達式為true返回true
-a 與運算,兩個表達式都為true返回true
邏輯運算符
假定變量 a 為 10,變量 b 為 20:
&& 邏輯的AND
[[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 邏輯的OR
[[ $a -lt 100 || $b -gt 100 ]] 返回 true
字符串運算符
= 檢測兩個字符串是否相等
!= 檢測兩個字符串是否不相等
-z 檢測字符串長度是否為0
-n 檢測字符串長度是否不為0
str 檢測字符串是否為空
if [ $a ]
then
echo "$a : 字符串不為空"
文件測試運算符
-b file 檢測文件是否是塊設備文件
-c file 檢測文件是否是字符設備文件
-d file 檢測文件是否是目錄
-f file 檢測文件是否是普通文件(既不是目錄也不是設備文件),
-g file 檢測文件是否設置了SGID位
-k file 檢測文件是否設置了粘著位(Sticky Bit)
-p file 檢測文件是否是有名管道
-u file 檢測文件是否設置了SUID位
-r file 檢測文件是否可讀
-w file 檢測文件是否可寫
-x file 檢測文件是否可執行
-s file 檢測文件是否為空(文件大小是否大於0)
-e file 檢測文件(包含目錄)是否存在
5、Shell echo命令
顯示普通字符串
echo "It is a test"
顯示轉義字符
echo "\"It is a test\""
顯示變量
echo "$name It is a test"
顯示換行
echo -e "OK! \n" # -e 開啟轉義
顯示不換行
echo -e "OK! \c"
顯示結果定向至文件
echo "It is a test" > myfile
原樣輸出字符串,不進行轉義或取變量(用單引號)
echo ‘$name\"‘ 輸出 $name\"
顯示命令執行結果
echo `date`
6、Shell printf命令
printf format-string [arguments...]
printf "%-10s %-8s %-4.2f\n" 郭靖 男 55.1234
郭靖 男 55.12
%s %c %d %f都是格式替代符
%-10s指一個寬度為10的字符(-表示左對齊,沒有則表示右對齊))
不足補空格,超過會全部顯示
%-4.2f 格式化為小數,.2指保留兩位小數
printf轉義序列
\a 警告字符,通常為ASCII的BEl字符
\b 後退
\c 抑制(不顯示)輸出結果中任何結尾的換行字符(只在%b格式指示符控制下的參數字符串中有效)而且,任何在參數裏的字符、任何接下來的參數以及任何留在格式字符串中的字符都被忽略

linux簡單命令與Shell腳本