1. 程式人生 > >Linux shell程式設計基礎

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命令可以通過檔案識別符號開啟或者執行具體的檔案,也可以將檔案重定向到標準輸入和輸出檔案中