1. 程式人生 > 其它 >移動端H5知識[系列] - fixed定位模式與其他

移動端H5知識[系列] - fixed定位模式與其他

一、shell概述

shell 的兩層含義:既是一種應用程式,又是一種程式設計語言 作為應用程式:互動式地解釋、執行使用者輸入的命令,將使用者的操作翻譯成機器可以識別的語言,完成相應功能,因而又可稱為shell命令解析器。

shell 是使用者和 Linux 核心之間的介面程式

1、使用者在提示符下輸入的命令都由 shell 先解釋然後傳給 Linux 核心;

2、它呼叫了系統核心的大部分功能來執行程式、並以並行的方式協調各個程式的執行;

3、Linux 系統中提供了好幾種不同的 shell 命令直譯器,如 sh、ash、bash 等。一般預設使用 bash 作為預設的直譯器;

4、shell 是使用者跟核心通訊幾種方式的一種。

作為程式設計語言:它定義了各種變數和引數,並提供了許多在高階語言中才具有的控制結構,包括迴圈和分支完成類似於 windows 下批處理操作,簡化我們對系統的管理與應用程式的部署稱之為shell 指令碼。

shell指令碼是shell命令的有序集合

        c/c++等語言,屬於編譯性語言(編寫完成後需要使用編譯器完成編譯、彙編、連結等過程變為二進位制程式碼方可執行);shell 指令碼是一種指令碼語言,我們只需使用任意文字編輯器,按照語法編寫相應程式,增加可執行許可權,即可在安裝 shell 命令直譯器的環境下執行

shell 指令碼主要用於:幫助開發人員或系統管理員將複雜而又反覆的操作放在一個檔案中,通過簡單的一步執行操作完成相應任務, 從而解放他們的負擔。

二、shell語法

 2.1 shell 指令碼的定義與執行

shell指令碼的程式碼編寫流程 

第一步:指定shell指令碼檔案,一般以.sh作為字尾名,也可以不加,例如:test.sh

第二步:編寫程式碼 
#!/bin/bash 
# #!用於指定當前指令碼檔案的shell直譯器的型別,如不寫,則用預設的shell
#shell指令碼是shell命令的有序集合,程式碼的構成就是命令

ls 

pwd  

echo "hello world"
第三步:修改檔案許可權 
chmod +x test.sh
第四步:執行指令碼檔案  三種執行方式
./test.sh            增加可執行許可權後執行
bash test.sh    直接指定使用 bash 解釋 test.sh    
. test.sh(或source test.sh) 使用當前 shell 讀取解釋 test.sh

三種執行指令碼的方式不同點:

./ bash 執行過程基本一致,後者明確指定 bash 直譯器去執行指令碼,指令碼中#!指定的直譯器不起作用前者首先檢測#!,使用#!指定的 shell,如果沒有使用預設的 shell

用./ bash 去執行會在後臺啟動一個新的 shell 去執行指令碼

用.去執行指令碼不會啟動新的 shell,直接由當前的 shell 去解釋執行指令碼。

2.2 變數

2.2.1 自定義變數

#!/bin/bash

#定義變數 
#shell指令碼中沒有資料型別可言,所以定義變數時不需要加資料型別
#shell指令碼中,賦值操作時不能在等號兩邊加空格 
#NUM = 100 #錯誤 
NUM=100 

#引用變數 
# $變數名 取一個變數的值 
i=$NUM 

#顯示變數 
echo $NUM 
echo $i 

#清除變數 
unset NUM 
echo "*************" 
echo $NUM 

#使用read從終端讀取資料儲存在變數中 
read str 
echo "str = $str" 

#使用readonly建立一個只讀的變數
readonly n=999 
echo "n = $n"

#指定變數初始化後不能再次修改變數的值,只能使用 
#n=666 
#echo "n = $n"

  

2.2.2 環境變數

shell在開始執行時就已經定義了一些和系統的工作環境有關的變數,我們在shell中可以直接使用$name引用 一般在~/.bashrc或/etc/profile檔案中(系統自動呼叫的指令碼)使用export設定,允許使用者後來更改 設定環境變數: 方法1:臨時設定 在終端執行命令 
MYVAL=999 
export MYVAL
方法2:永久設定 需要在配置檔案(~/.bashrc或/etc/profile)中進行設定即可,設定完畢後需要通過source命令配置檔案立即生效 使用環境變數,一般環境變數類似c語言中的全域性變數,可以再shell指令碼檔案中任意使用 
#!/bin/bash 

echo "You are welcome to use bash" 
echo "Current work dirctory is $PWD" 
echo "the host name is $HOSTNAME" 
echo "your home dir $HOME" 
echo "Your shell is $SHELL" 
echo "user env val is $MYVAL1"

2.2.3 預設變數

$#:傳給shell指令碼引數的數量 $*:傳給shell指令碼引數的內容 $1、$2、$3、...、$9:執行指令碼時傳遞給其的引數,用空格隔開 $?:命令執行後返回的狀態 "$?"用於檢查上一個命令執行是否正確(在Linux中,命令退出狀態為0表示該命令正確執 行,任何非0值表示命令出錯)。 $0:當前執行的程序名 $$:當前程序的程序號 "$$"變數最常見的用途是用作臨時檔案的名字以保證臨時檔案不會重複 
#! /bin/bash 
#位置變數$0 ‐ $9 儲存從終端輸入的每一個引數 
echo "\$0 = $0" 
echo "\$1 = $1" 
echo "\$2 = $2" 
echo "\$5 = $5" 
echo "\$6 = $6" 
echo "\$7 = $7" 
echo "\$8 = $8" 
echo "\$9 = $9" 
#如果超過9,需要加大括號 
echo "\$10 = ${10}" 

#$#:儲存命令列傳入的引數的個數,不包括$0 
echo "\$# = $#" 

#$@或者$*:儲存所有的命令列傳入的引數,但是不包括$0
echo "\$@ = $@"
echo "\$* = $*"

#$$:獲取當前程序的程序號
echo "\$$ = $$"
#read NUM

# $? 返回上一個命令執行的結果,如果執行成功,則$?的值為0,執行失敗,則為非0
ls
echo "\$? = $?"

ls asdfasdf
echo "\$? = $?" 

2.2.4 指令碼變數的特殊用法

""(雙引號):包含的變數會被解釋 ''(單引號):包含的變數會當做字串解釋 ``(數字鍵1左面的反引號):反引號中的內容作為系統命令,並執行其內容,可以替換輸出為一個變數 $ echo "today is `date` " today is 2012年07月29日星期日 12:55:21 CST \ 轉義字元:同c語言 \n \t \r \a等 echo命令需加-e轉義 (命令序列):由子shell來完成,不影響當前shell中的變數 { 命令序列 }:在當前shell中執行,會影響當前變數 
#!/bin/bash 

name="zhangsan" 
#雙引號裡面的特殊字元,會使用其特殊含義 
string1="good moring $name" 
#單引號裡面的特殊字元,都會失去特殊含義 
string2='good moring $name' 

echo $string1 
echo $string2 
#反引號:獲取一個shell命令的輸出結果,一般對有輸出結果的命令經常去使用,也可以使用$()與反引號等價 echo
"today is date" echo "today is `date`" echo 'today is `date`' echo "My dir is $(ls)"
#轉義字元:使用時,需要在echo後面加上‐e選項 echo
"**************" echo "this \n is\ta\ntest" echo ‐e "this \n is\ta\ntest" echo "**************"
num
=100 #由子shell來完成,不影響當前shell中的變數 ( num=999;echo "1 $num" ) echo 1:$num #在當前shell中執行,會影響當前變數 { num=666; echo "2 $num"; } echo 2:$num

2.3 條件測試語句

在寫shell指令碼時,經常遇到的問題就是判斷字串是否相等,可能還要檢查檔案狀態或進行數字測試,只有這些測試完成才能做下一步動作 test命令:用於測試字串、檔案狀態和數字 test命令有兩種格式: test condition 或 [ condition ] 使用方括號時,要注意在條件兩邊加上空格 shell指令碼中的條件測試如下: 檔案測試、字串測試、數字測試、複合測試 測試語句一般與後面講的條件語句聯合使用 

2.3.1 檔案測試

1)按照檔案型別 -e 檔名 檔案是否存在 -s 檔名 是否為非空 -b 檔名 塊裝置檔案 -c 檔名 字元裝置檔案 -d 檔名 目錄檔案 -f 檔名 普通檔案 -L 檔名 軟連結檔案 -S 檔名 套接字檔案 -p 檔名 管道檔案    2)按照檔案許可權 -r 檔名 可讀 -w 檔名 可寫 -x 檔名 可執行   3)兩個檔案之間的比較 檔案1 -nt 檔案2 檔案1的修改時間是否比檔案2新 檔案1 -ot 檔案2 檔案1的修改時間是否比檔案2舊 檔案1 -ef 檔案2 兩個檔案的inode節點號是否一樣,用於判斷是否是硬連結
#! /bin/bash 

echo "please input a filename >>> " 
read FILE 
test ‐e $FILE 
echo "存在?$?" 
 
test ‐s $FILE 
echo "非空?$?" 

[ ‐r $FILE ] 
echo "可讀?$?" 

[ ‐w $FILE ] 
echo "可寫?$?" 

[ ‐x $FILE ] 
echo "可執行?$?" 

test ‐b $FILE 
echo "塊裝置檔案?$?"

test ‐c $FILE 
echo "字元裝置檔案?$?" 

test ‐d $FILE 
echo "目錄檔案?$?" 

test ‐f $FILE 
echo "普通檔案?$?"

test ‐L $FILE 
echo "軟連結檔案?$?" 

test ‐S $FILE 
echo "套接字檔案?$?" 

test ‐p $FILE 
echo "管道檔案?$?"
2.3.2 字串測試 s1 = s2 測試兩個字串的內容是否完全一樣 s1 != s2 測試兩個字串的內容是否有差異 -z s1 測試s1 字串的長度是否為0 -n s1 測試s1 字串的長度是否不為0
#! /bin/bash
 
test "hello" = "hello" 
echo "相等?$?" 

test "hello" = "hella" 
echo "相等?$?" 

test "hello" != "hello" 
echo "不相等?$?" 

test "hello" != "hella" 
echo "不相等?$?" 

test ‐z "hello" 
echo "長度是否為0?$?" 

test ‐n "hello" 
echo "長度是否不為0?$?"