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 表示第乙個檔案中的內容...