shell是什麼,能幹什麼?
1.程式
狹義:作業系統程式和應用程式。
作業系統程式是用來調用監控核心的,在這個作業系統上面運作着所有我們可以應用的程式。
計算機的運作是這樣一個聯系(或是支援)
硬體==》核心 ==》作業系統 ==》 shell ==》程式
***核心 ==》作業系統 ==》 shell(我覺得他們都被包含在作業系統中)****
(這裡我們隻是從程式和作用的的角度看作業系統。大家說的linux作業系統是個大集合是一個全面的概念。就好比
china 是瓷器。也是中國)。
簡化下: 硬體 ==》作業系統 ==》 程式
shell是一個指令解釋器。處于linux的作業系統(核心)與應用程式之間。通過作業系統提供的方法解釋并運作應用程式。
bash shell是centos預設的shell。包含簡單的文法和環境。檢視本機的shell類型 (echo $SHELL),檢視shell的版本(
bash --version ).
shell腳本的開服環境
任何編輯器都可以。(類windows的記事本)centos下的vi或vim ,簡單的操作也可以 echo "" >filename
shell的檔案名:
其實,linux一切都是檔案。不像window,以字尾名為差別。這裡我們給的.sh 字尾是一種約定俗成的方式。友善
大家的識别和管理。是以,不加.sh也是沒有問題的。
舉個例子:
$ cat -n test_hello.sh
1 #!/bin/bash
2 #author:swallow
3 echo 'hello world'
shell的文法格式:
1 #! 這2個字元是shell解釋器開始讀取shell的開始符号。 /bin/bash 是在建立使用者的時候。定義的shell的類型。關系到shell的運作環境。
2 # 是shell頭部的注釋内容一般是日期。作者。 如果是在shell腳本裡面大段的#就是為了友善了解文法而寫的注釋。
3 echo 'hello world' 這些就是腳本的主體。就是一些基礎指令或是if while for 等邏輯結構。
可以簡單的了解:shell 主體就是一堆可以實作我們需要的功能的指令的集合。
shell的執行:
linux的檔案權限體系由 r w x 組成。
如果有x權限的可以直接:用檔案名來執行
一般使用者建立的檔案如果沒有 x 權限沒有辦法執行的。
在練習的時候可以賦予權限: chmod +x test_hello.sh
或者通過 bash 或者 sh test_hello.sh (bash/sh 可以寫全路徑名 /bin/bash /bin/sh)
這裡 sh 是bash 的軟連結(類似于win的快捷方式)
$ ll /bin/sh
lrwxrwxrwx. 1 root root 4 Jan 18 15:01 /bin/sh -> bash
(了解linux的人,應該一目了然)
$ bash <test_hello.sh (這樣子也可以)
如果在腳本裡面 可以通過管道 | bash 執行
另一種方法就是: . 或者 source 本質是一樣的(讀入腳本并且執行)
舉個例子比較下:source和 sh 的差別;
$ cat -n /home/swallow/test_source.sh
2 #
3 cd /tmp
4 echo "the script is ok"
5 pwd
[swallow@swallow ~]$ sh test_source.sh
the script is ok
/tmp
[swallow@swallow ~]$ source test_source.sh
[swallow@swallow tmp]$ ************用source執行完程式切換到/tmp目錄下)
sh執行沒由進入到/tmp ,而source 進入到/tmp目錄下。
因為:sh指令在執行的時候shell會開啟一個子程序。shell的執行在子程序裡面執行。在我們
執行shell的時候實際還在父程序裡面。而沒有切到子程序下面。
而source 指令執行時直接在父程序裡面執行沒有開啟新的子程序。一般如果腳本裡面還包含其它的
shell腳本。建議,用source 執行。
檢視shell的執行結果:
echo $?
一般為0 是正常執行。因為linux源于Unix。Unix裡面的檔案執行後釋放程序的标記符裡面0就代表成功.
檢視當下的shell的具體環境可以通過: env 指令檢視全局變量(系統級) set 指令輸出所有變量。包括
全局變量和局部變量。declare 指令輸出所有的變量,函數,整數,和已經導出的變量。
一般修改變量的方法:
在 /etc/profile 檔案的結尾添加一句;
export PATH=/softwaredirectory/bin:$PATH
一般就是講新安裝軟體的路徑的bin目錄放入/etc/profile 檔案的末尾。并且重新定義PATH.為了不影響原
PATH 。一般的指派寫法: PATH=directory:$PATH (新目錄和引用原來的目錄)
幾種引用的對比:"" ' ' $ ``
# var=123
# echo "$var"
123
# echo '$var'
$var
# echo $var
123# echo `date`
Sat Jan 21 16:29:15 CST 2017
# echo $(date)
Sat Jan 21 16:32:15 CST 2017
一般 單引号:比較直接裡面是什麼,就直接輸出。 雙引号遇到例如\ $ 會轉義
·· 雙反引号的作用和 $() 類似:一般用于指令的引用。
技巧: 生成有序列 {a..z} {1..100} seq 30
一個例子明白:$0:目前腳本名稱 $$;腳本執行的PID $# :傳入的參數的個數
$ vim test.sh
#!/bin/bash
#
echo -e "script name is : $0\n"
echo -e "pid is :$$ \n"
echo -e "sum_file is :$# \n"
$ sh test.sh test1 test2 test3
script name is : test.sh
pid is :26918
sum_file is :3
本文轉自 swallow_zys 51CTO部落格,原文連結:http://blog.51cto.com/12042068/1893578,如需轉載請自行聯系原作者