shell入門基礎

2021-09-05 09:15:12 字數 4602 閱讀 4654

shell基礎知識

shell是linux的外殼,它包在linux核心的外面,為使用者和核心之間的互動提供乙個介面

當使用者下達指令給作業系統,實際上是把指令告訴給shell,經過shell解釋,處理後核心做出相應的動作

系統的回應和輸出資訊由shell處理,然後顯示在使用者螢幕上

檢視系統預設shell

方法一:

[root@station mnt]# echo $shell

/bin/bash

方法二:

[root@station mnt]# cat /etc/passwd | head -1

root:x:0:0:root:/root:/bin/bash

方法三:

[root@station mnt]# grep root /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

shell指令碼的建立

#!/bin/bash   ###指定直譯器:由哪個程式來執行指令碼內容,必須寫在第一行

#! :幻數

echo 列印

例1:編寫指令碼,輸出hello world

[root@station mnt]# vim test.sh

[root@station mnt]# cat test.sh

#!/bin/bash

echo "hello world"

[root@station mnt]# sh test.sh

hello world

例2:清空/var/log/messages的日誌檔案

[root@station mnt]# vim log.sh 

#!/bin/bash

cd /var/log

cat /dev/null > messages

echo "logs has been cleaned up"

####上述指令碼缺陷:

1、上述指令碼缺少使用者判斷,任何使用者都可執行這個指令碼

2、沒有控制流程,只是把簡單的命令進行順序操作,沒有執行是否成功判斷

####對上面指令碼加以改進

#!/bin/bash

root_uid=0

log_dir=/var/log

####判斷是否是超級使用者,如果不是,輸出錯誤提示資訊

if [ "$uid" -ne "root_uid" ];then

echo "error:you should be root to run this script"

exit 1

fi####判斷是否能進入/var/log目錄,如果不允許,輸出提示資訊

cd $log_dir ||

####清空日誌,輸出清空完成提示資訊

cat /dev/null > messages &&

####清空失敗,退出

echo "logs cleaned failed"

exit 1

練習:編寫指令碼實現httpd自動安裝並且開機自動啟動

echo "httpd has been isntalled finished" ###安裝完成提示使用者資訊指令碼執行方法

1、sh或者bash方式sh或者bash方式

sh script.sh | bash script.sh	##沒有執行許可權時
[root@station mnt]# vim test.sh

[root@station mnt]# cat test.sh

#!/bin/bash

echo "hello"

[root@station mnt]# sh test.sh

hello

[root@station mnt]# bash test.sh

hello

2、path/或者./方式 必須給編寫的指令碼可執行許可權

path/script.sh | ./script.sh	##絕對路徑,當前目錄下sh ./不是在當前shell執行,會開啟新shell執行,完成後退出
[root@station mnt]# /mnt/test.sh

-bash: /mnt/test.sh: permission denied

[root@station mnt]# chmod +x test.sh

[root@station mnt]# /mnt/test.sh

hello

[root@station mnt]# ./test.sh

hello

3、source方式

source script.sh | . script.sh	##使用source或. 來讀指定shell檔案,並會把其他shell中的變數值執行結果返回父shell繼續使用
[root@station mnt]# source test.sh 

hello

[root@station mnt]# . test.sh

hello

4、三種方式區別

[root@station mnt]# vim test.sh 

[root@station mnt]# cat test.sh

#!/bin/bash

username=`whoami`

[root@station mnt]# sh test.sh

[root@station mnt]# echo $username

[root@station mnt]# /mnt/test.sh

[root@station mnt]# echo $username

[root@station mnt]# source test.sh

[root@station mnt]# echo $username

root

source或. 來讀指定shell檔案,會把其他shell中的變數值返回父shell繼續使用

shell指令碼規範

#!/bin/bash			###指定直譯器

#date:2018-12-23 ###日期

#author:sql ###作者

#mail:[email protected] ###郵箱

#desc:this script is for ... ###指令碼描述

#version: 1.1 ###版本

自動生成指令碼宣告

[root@station mnt]# vim /etc/vimrc

66 autocmd bufnewfile *.sh exec ":call westos()"

67 func westos()

76 endfunc

示例:

[root@station mnt]# vim auto.sh

[root@station mnt]# cat auto.sh

# author: sql

# version:

# mail:

# date: 2018-12-23

# description:

#

#!/bin/bash

shell指令碼的執行過程

1、載入系統環境變數

env檢視系統環境變數

2、一條一條命令執行,遇到子指令碼,先執行子指令碼,然後返回父指令碼繼續執行

[root@station mnt]# env

xdg_session_id=1

hostname=station.domain155.example.com

term=xterm-256color

shell=/bin/bash

histsize=1000

ssh_client=172.25.254.55 35006 22

ssh_tty=/dev/pts/0

user=root

...

shell基礎入門

linux中有好多中不同的shell,但是通常我們使用bash bourne again shell 進行shell程式設計,因為bash是免費的並且很容易使用。所以在本文中筆者所提供的指令碼都是使用bash 但是在大多數情況下,這些指令碼同樣可以在 bash的大姐,bourne shell中執行 ...

shell基礎和簡單入門

1 shell簡介 shell提供了使用者和核心進行互動操作的一種介面,它接收使用者的命令並送入核心執行。shell指令碼語言是linux unix系統上應用廣泛的實用程式語言,所以對於任何乙個希望精通linux作業系統的人,掌握shell指令碼知識都是非常必要的。而它的特點是容易學習,但是精通很難...

shell入門 基礎命令篇

diff 命令 diff 命令是用來比較兩個檔案或目錄的不同 diff 在比較檔案過程中結果讀取方式 num1 num2 a c d num3,num4 num1,num2 表示在第乙個檔案中的行數 a 表示新增 add c 表示更改 change d 表示刪除 delete 表示第乙個檔案中的內容...