Shell 教程入門

Shell 教程

Shell 是一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋樑。Shell 既是一種命令語言,又是一種程序設計語言。php

Shell 是指一種應用程序,這個應用程序提供了一個界面,用戶經過這個界面訪問操做系統內核的服務。html

Ken Thompson 的 sh 是第一種 Unix Shell,Windows Explorer 是一個典型的圖形界面 Shell。node

Shell 在線工具linux


Shell 腳本

Shell 腳本(shell script),是一種爲 shell 編寫的腳本程序。redis

業界所說的 shell 一般都是指 shell 腳本,但讀者朋友要知道,shell 和 shell script 是兩個不一樣的概念。shell

因爲習慣的緣由,簡潔起見,本文出現的 "shell編程" 都是指 shell 腳本編程,不是指開發 shell 自身。編程


Shell 環境

Shell 編程跟 JavaScript、php 編程同樣,只要有一個能編寫代碼的文本編輯器和一個能解釋執行的腳本解釋器就能夠了。vim

Linux 的 Shell 種類衆多,常見的有:bash

  • Bourne Shell(/usr/bin/sh或/bin/sh)
  • Bourne Again Shell(/bin/bash)
  • C Shell(/usr/bin/csh)
  • K Shell(/usr/bin/ksh)
  • Shell for Root(/sbin/sh)
  • ……

本教程關注的是 Bash,也就是 Bourne Again Shell,因爲易用和免費,Bash 在平常工做中被普遍使用。同時,Bash 也是大多數Linux 系統默認的 Shell。編輯器

在通常狀況下,人們並不區分 Bourne Shell 和 Bourne Again Shell,因此,像 #!/bin/sh,它一樣也能夠改成 #!/bin/bash

#! 告訴系統其後路徑所指定的程序便是解釋此腳本文件的 Shell 程序。


第一個shell腳本

打開文本編輯器(可使用 vi/vim 命令來建立文件),新建一個文件 test.sh,擴展名爲 sh(sh表明shell),擴展名並不影響腳本執行,見名知意就好,若是你用 php 寫 shell 腳本,擴展名就用 php 好了。

輸入一些代碼,第一行通常是這樣:

實例

#!/bin/bash
echo "Hello World !"

運行實例 »

#! 是一個約定的標記,它告訴系統這個腳本須要什麼解釋器來執行,即便用哪種 Shell。

echo 命令用於向窗口輸出文本。

運行 Shell 腳本有兩種方法:

一、做爲可執行程序

將上面的代碼保存爲 test.sh,並 cd 到相應目錄:

chmod +x ./test.sh #使腳本具備執行權限 ./test.sh #執行腳本

注意,必定要寫成 ./test.sh,而不是 test.sh,運行其它二進制的程序也同樣,直接寫 test.sh,linux 系統會去 PATH 裏尋找有沒有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 裏,你的當前目錄一般不在 PATH 裏,因此寫成 test.sh 是會找不到命令的,要用 ./test.sh 告訴系統說,就在當前目錄找。

二、做爲解釋器參數

這種運行方式是,直接運行解釋器,其參數就是 shell 腳本的文件名,如:

/bin/sh test.sh /bin/php test.php

這種方式運行的腳本,不須要在第一行指定解釋器信息,寫了也沒用。

 

出處:https://www.runoob.com/linux/linux-shell-variable.html

========================================================================

在Linux中查看系統支持的shell類型

[root@node1 ~]# cat /etc/shells
/bin/sh                  # Linux經常使用的shell,指向/bin/bash。
/bin/bash                # Linux經常使用的shell,默認使用的shell。
/sbin/nologin            # Linux經常使用的shell,用於禁止用戶登陸。
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh


查看系統默認shell,兩種方式

[root@node1 ~]# echo $SHELL
/bin/bash
[root@node1 ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
末尾的/bin/bash就是用戶登陸後使用的shell


查看bash版本

[root@node1 ]# cat /etc/redhat-release 
CentOS Linux release 7.3.1611 (Core) 
[root@node1 ]# bash --version
GNU bash, version 4.2.46(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

 


檢測是否有bash漏洞

[root@node1 system]# env x='() { :;}; echo be careful' bash -c "echo this is a test"
this is a test
# 出現上述表示正常
[root@node1 system]# env x='() { :;}; echo be careful' bash -c "echo this is a test"
be careful
this is a test
# 表示存在漏洞,需儘快修復

 

升級bash

yum update bash -y

 

shell腳本的執行方式

bash script-file或sh script-file,不須要文件有可執行權限。
path/script-file或./script-file,文件須要有可執行權限。
source script-file或 . script-file,讀入腳本並執行腳本;在當前shell中加載並執行腳本文 件(其餘運行shell腳本的方式會產生一個子shell來執行)
bash < script-file或cat script-file|bash

 

 

出處:https://blog.csdn.net/qq_29767087/article/details/90705657

相關文章
相關標籤/搜索