Linux shell程式設計基礎
一、linux常用命令 1.修改機器名稱(實質上是機器的域名,相當於www.baidu.com):vim /etc/hostname 2.關閉機器:shutdown -h now 或者 reboot -h now來直接重啟 3.檢視ip地址:ifconfig 4.通過vim /etc/hosts修改域名和ip的對映關係:192.186.0.104 Master,訪問的時候直接訪問域名即可,如果要訪問遠端訪問機器,可以直接訪問當前機器的 /etc/hosts 檔案中配置遠端機器的域名IP地址的對映關係 5.pwd(print work directory)--檢視當前所在的工作目錄 6.cd(change directory)--切換到某個工作目錄 7.ls(list)--檢視當前目錄下的檔案的具體名稱,通過ls -ll來檢視當前目錄下檔案的詳細資訊 8.man+命令名稱 --檢視命令的用法 9.vim--開啟檔案,vim是linux文字編輯器,開啟檔案後可以有i進行插入編輯,“:wq”儲存修改 “q!”不儲存,強制退出,vim filename--如果filename存在開啟檔案,如果檔案不存在則建立檔案 10.檢視檔案內容,使用vim或者gedit圖形化編輯器,cat--來顯小檔案中的所有內容,如果檔案需要被一頁一頁的檢視,此時可以用more命令來檢視,enter間來翻頁,tail--檢視檔案最後的內容,經典的使用場景是檢視伺服器日誌內容,head--檢視檔案開頭的內容 11.建立檔案簡潔方式:touch filename 例如touch linux.txt 12.目錄的建立可以直接使用mkdir來建立,如果多級目錄需要建立,可以用mkdir -p 13.刪除空目錄rmdir,rm -rf 強制刪除當前資料夾的所有內容 14.移動檔案 mv srcfile disfile 15.拷貝檔案 cp srcfile disfile
二、檔案壓縮解壓縮、檔案使用者許可權、分散式ssh配置 1.檔案壓縮命令:tar -czvf 目標文件的名字 要壓縮文件的名稱 2.檔案解壓縮命令:tar -zxvf 要解壓檔案 可以去掉v這個option來隱藏具體的詳情 3. -rwxrw-r-- 1 hadoop hadoop 368 9月 15 16:23 start.sh -rw-rw-r-- 1 hadoop hadoop 85 9月 14 10:49 start-worker2.sh 第1列:每一行最前面的內容代表檔案型別:檔案使用“-”,目錄使用“d”,快捷方式“l” 第2-4列:代表當前使用者對於該檔案(夾)具體的操作許可權,需要說明的是許可權有: a)可讀 r 2^2 = 4 b)可寫 w 2^1 = 2 c)可執行 x 2^0 = 1 如果從數字的角度考慮,對檔案的最高許可權為7 第5-7列:代表當前使用者所在使用者組對於該檔案(夾)具體的操作許可權 第8-10列:代表當前使用者所在使用者組以外其他使用者對於該檔案(夾)具體的操作許可權 第11列:代表當前檔案的連結數: 第12列:代表當前檔案使用者擁有者; 第13列:代表當前使用者所在的使用者組; 第14列:檔案大小 第15大列:檔案建立或者修改的時間 最後一列:檔名稱 4.修改檔案的使用者和使用者組: 建立使用者:useradd spark 設定檔案的擁有者:chown -R spark filename 使用chgrp來改變當前檔案所屬的使用者組 也可以使用chown所屬使用者:所屬使用者組 檔名字 5.修改檔案許可權 chmod對檔案的擁有者 檔案組的擁有者 檔案以外的其他人 設定許可權,重點強調的x許可權也就是執行; 6.ssh:遠端免密登入 安裝ssh:apt-get install ssh 啟動ssh:service ssh start
三、shell中變數以及引用 1.變數分為三種 a)本地變數:只在當前shell生命週期有效 b)環境變數:在使用者登入後到登出錢對於所有的編輯器、指令碼、程序等都有效 c)位置引數:主要適用於向shell指令碼產地引數,例如 spark-shell --master spark://Master:7077 2.${variablename}會具體提取出變數的內容,當然可以把{}去掉 例如:$HADOOP_CONF_DIR來提取出Hadoop配置檔案具體所在路徑的值 3.變數賦值的時候“=”兩側不能有空格,如果變數名稱後有空格,則會被認為要執行command指令;如果要列印變數的內容,可以通過echo $variablename來列印 例如echo $val 4.在shell指令碼中編寫關於變數的基本使用: #!/bin/bash #指定直譯器 a=100 #賦值 let "a+=10" #把a的值加上10 echo "a=$a" #輸出a的值 5.環境變數 使用export關鍵字來把變數變成環境變數 export JAVA_HOME=/usr/hadoop/java 可以通過使用“env”來檢視系統中的環境變數的內容; 6.系統中核心的配置檔案 常見的系統配置檔案: .bashrc--當前使用者的用到的軟體的環境變數 bash_profile(profile) bash_logout--使用者登出時執行 修改系統檔案後一般要通過source命令使其立即生效
7.位置引數:主要用於從命令列向shell指令碼傳遞引數 具體而言,$0代表指令碼的名稱,$1代表傳入的第一個引數,$2代表傳入的第二個引數,如果要代表全部引數,則需要使用$*,或[email protected]表示從第一個位置的全部引數 $#: 代表傳遞到指令碼中的引數的數量 $$: 指令碼執行的程序號 $?:代表命令退出的狀態,0表示沒有錯誤,非0表示有錯誤 8.命令替換:將命令的輸出作為值賦值給某個變數 例如export SPARK_HOME="$(cd "'dirname "$0"'"/..,pwd)"實際上使用pwd獲得值來取代dirname,並且如果使用$()則會對其時間求值,對例子來說pwd的值為“/home/hadoop/docker”,$0 代表當前檔名稱
四、Linux Shell實戰條件判斷,迴圈語句 條件判斷 1.if條件語句 if ... then ... fi ;注意if條件判斷後如果沒有分號,則需要把then換行,如果if和then處於同一行,則需要在then前面加上“;”,要終止if語句使用fi
#!/bin/bash #新增直譯器
echo "please type your content:" #輸入提示
read content #讀取輸入
if [ "$content" -lt 10 ] #比較
then
echo "The content you typed id smaller then 10"
fi
2.複雜的if...then...else...fi
說明:case表示式用於多分支選擇語句,根據表達書的值來選擇要執行的語句,如果遇到匹配的值,就執行該值後面的語句,直到遇到雙分號(;;)為止,可以使用*)來匹配所有未匹配的具體值的內容,例項:
#!/bin/bash
echo "Please enter your number (1-9):"
read number
case "$number" in
1)
echo "number = $number";;
2)
echo "number = $number";;
*)
echo "Other number = $number";;
esac
迴圈 1.迴圈的型別:for、while、until迴圈語句 2.迴圈控制語句:break、continue,工作機制和java、c等是一樣的 for型別:
#!/bin/bash #直譯器
for item in 0 1 2 3 4 5 6 7 8 9
do
echo "The current item is :$item"
done
#!/bin/bash
for item in {0..100}
do
echo "The current item is : $item"
done
求1+2+3..+100
#!/bin/bash
sum=0
for item in {0..100}
do
let "sum+=item"
done
echo "1+2..+100 = $sum"
迴圈打印出所有當前檔案目錄下的檔案
#!/bin/bash
for file in $( ls )
do
echo "$file"
done
while迴圈 while迴圈會根據測試語句絕對是否迴圈及迴圈次數 while expression;do ... done a)最簡單的while迴圈
#!/bin/bash
item=0
while (( "$item"<=10 ))
do
echo "current value: $item"
let "item++"
done
b)有停止迴圈標誌的while
#!/bin/bash #直譯器
echo "Please enter your number:" #提示輸入
read number #接收輸入引數
while [[ "$number" != 5 ]] #while迴圈,5的時候退出
do
if [ "$number" -lt 5 ] #if判斷
then
echo "So smaller,please try again"
read number #再次讀入引數
elif [ "$number" -gt 5 ]
then
echo "So big,please try again"
read number
else
exit 0
fi
done
echo "Bravo!!!"
c)使用shift本身是使得變數的位置下移動一位,$5代替$4
exec代表具體的啟動執行 exec和ssh配合會啟動分散式系統! exec命令可以通過檔案識別符號開啟或者執行具體的檔案,也可以將檔案重定向到標準輸入和輸出檔案中