1. 程式人生 > >Linux---shell變數及指令碼中的函式

Linux---shell變數及指令碼中的函式

一、什麼是變數?

shell在定義變數的時候,變數名與變數之間不能存在空格,這個大多數的語言的這個不同還是蠻大的,不過定義的規則就其他的語言定義的規則大致相同了。
1) 區域性變數
區域性變數在指令碼或命令中定義,僅在當前shell例項中有效,其他shell啟動的程式不能訪問區域性變數。
2) 環境變數
所有的程式,包括shell啟動的程式,都能訪問環境變數,有些程式需要環境變數來保證其正常執行。必要的時候shell指令碼也可以定義環境變數。
3) shell變數
shell變數是由shell程式設定的特殊變數。shell變數中有一部分是環境變數,有一部分是區域性變數,這些變數保證了shell的正常執行

二、變數的分類

1、環境級變數

[root@localhost ~]# export a=1   ##export宣告,相當於把變數放到公共部分,讓子程序可以讀到
[root@localhost ~]# echo $a
[root@localhost ~]# bash
[root@localhost ~]# ps f
[root@localhost ~]# echo $a

這裡寫圖片描述

2、使用者級變數

[root@localhost ~]# vim .bash_profile
在最後一行加入:export a=1
[root@localhost ~]# source .bash_profile  ##重新整理使用者變數
[root@localhost ~]# echo $a [root@localhost ~]# exit ##退出 [kiosk@foundation28 Desktop]$ ssh root@172.25.254.128 [root@localhost ~]# echo $a ##再次檢視a=1依然生效

這裡寫圖片描述
這裡寫圖片描述

3、系統級變數

[root@localhost ~]# vim /etc/profile
在最後一行加入:export a=2
[root@localhost ~]# source /etc/profile ##刷新系統級變數
[root@localhost ~]# echo $a  
[root@localhost ~]# exit [kiosk@foundation28 Desktop]$ ssh root@172.25.254.128 [root@localhost ~]# echo $a

這裡寫圖片描述
這裡寫圖片描述

[root@localhost mnt]# install_apache.sh
[root@localhost mnt]# echo $PATH
[root@localhost mnt]# chmod +x /mnt/*
[root@localhost mnt]# PATH=$PATH:/mnt
[root@localhost mnt]# echo $PATH

這裡寫圖片描述

[root@localhost mnt]# install_apache.sh 8989
[root@localhost mnt]# exit
[kiosk@foundation28 Desktop]$ ssh root@172.25.254.128
[root@localhost ~]# install_apache.sh 8989

這裡寫圖片描述

[root@localhost ~]# vim /etc/profile    ##寫入系統變數檔案
在最後一行加入:export PATH=$PATH:/mnt
[root@localhost ~]# source /etc/profile   ##重新整理
[root@localhost ~]# exit
[kiosk@foundation28 Desktop]$ ssh root@172.25.254.128
[root@localhost ~]# install_apache.sh 8989

這裡寫圖片描述
這裡寫圖片描述

三、字元轉譯及變數宣告

1、“\“ 轉譯單個字元

[root@localhost ~]# a=\$1
[root@localhost ~]# echo $a

這裡寫圖片描述

2、” ” 弱引用,批量轉譯”“中出現的字元

[[email protected] ~]# echo "####`hostname`####"

這裡寫圖片描述

3、’ ’ 強引用,批量轉譯”中出現的字元

[root@localhost ~]# echo '####`hostname`####'

這裡寫圖片描述

4、’ ’ 與 ” ” 區別在於 ” “不能轉譯”\”,”`”,”!”,”$”

[root@localhost ~]# a="$1"
[root@localhost ~]# echo $a

[root@localhost ~]# a='$1'
[root@localhost ~]# echo $a

這裡寫圖片描述

5、${ } 變數宣告

[root@localhost ~]# a=1
[root@localhost ~]# echo $ab

[root@localhost ~]# echo ${a}b

這裡寫圖片描述

6、$[ ] 作運算

$( )相當於` `
[root@localhost ~]# echo $[1+1]

這裡寫圖片描述

四、變數值傳遞

$1 指令碼後的第一串字串
$2 指令碼後的第二串字串
$3 指令碼後的第三串字串
$# 指令碼後所跟字串的個數
$* 指令碼後根的所有字串,模式為“1 2 3[email protected] 指令碼後根的所有字串,模式為"1" "2" "3"

命令內容:

[root@localhost mnt]# echo $$  ##顯示當前所在的程序
[root@localhost mnt]# vim test.sh
[root@localhost mnt]# sh test.sh 

這裡寫圖片描述

[root@localhost mnt]# sh test.sh  westos
[root@localhost mnt]# sh test.sh  westos linux
[root@localhost mnt]# sh test.sh  westos linux redhat

這裡寫圖片描述

區別:

$*[email protected]區別: $*後面是一串字元,[email protected]後面是三串字元

證明:

[root@localhost ~]# cd /mnt
[root@localhost mnt]# vim for.sh
[root@localhost mnt]# sh -x for.sh westos linux redhat 
##執行指令碼,並檢視過程

這裡寫圖片描述
這裡寫圖片描述

[root@localhost mnt]# vim for.sh
[root@localhost mnt]# sh -x for.sh westos linux redhat

這裡寫圖片描述
這裡寫圖片描述

編寫指令碼:當輸入的檔案少於兩個時提示錯誤,用指令碼建立檔案中使用者及密碼

[root@localhost mnt]# vim create_user.sh

這裡寫圖片描述

[root@localhost mnt]# sh create_user.sh 
[root@localhost mnt]# cat userfile
[root@localhost mnt]# cat passfile
[root@localhost mnt]# sh create_user.sh userfile passfile

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

五、用read實現變數傳遞

read  WESTOS
read -s WESTOS    ##-s表示加密
read -p “input:” WESTOS  ##-p表示提示 

測試IP的互動式傳參:

[root@localhost mnt]# vim text.sh 
[root@localhost mnt]# sh text.sh

這裡寫圖片描述
這裡寫圖片描述

在登入使用者和密碼時使用互動式傳參:

[root@localhost mnt]# vim create_user.sh   ##編寫指令碼
[root@localhost mnt]# chmod +x create_user.sh  ##給指令碼可執行許可權
[root@localhost mnt]# ./create_user.sh  ##執行指令碼

這裡寫圖片描述
這裡寫圖片描述

六、linux系統中命令別名的設定

臨時更改:

[root@localhost ~]# alias xie='vim'   ##將vim定義為xie
[root@localhost ~]# xie

這裡寫圖片描述

[root@localhost ~]# alias

這裡寫圖片描述
在使用者和系統裡寫入:永久更改

[root@localhost ~]# vim .bashrc
alias xie='vim'
[root@localhost ~]# source .bashrc
[root@localhost ~]# su - student
[student@localhost ~]$ xie
[student@localhost ~]$ exit

這裡寫圖片描述
這裡寫圖片描述

[root@localhost ~]# vim /etc/bashrc
alias xie='vim'
[root@localhost ~]# source /etc/bashrc  ##刷新系統變數
[root@localhost ~]# su - student
[student@localhost ~]$ xie
[student@localhost ~]$ exit

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
刪除:

[root@localhost ~]# vim /etc/bashrc   ##刪除alias xie='vim'
[root@localhost ~]# vim .bashrc ##刪除alias xie='vim'
[root@localhost ~]# source /etc/bashrc
[root@localhost ~]# alias  

這裡寫圖片描述

[root@localhost ~]# unalias xie  ##刪除alias
[root@localhost ~]# alias 

這裡寫圖片描述

七、利用命令執行結果設定變數

Hostname=$(hostname)
Hostname=`hostname`
$?是命令在執行完成之後產生的退出值
範圍是[0~255]
當$0=0時標示命令執行沒![這裡寫圖片描述](https://img-blog.csdn.net/20180621234422291?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FyZ3VlZF9E/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)有錯誤輸出
這個值可以用exit命令執行

指令碼編寫:顯示IP的狀態用退出值執行退出

[root@localhost mnt]# vim ip_check.sh

這裡寫圖片描述

[root@localhost mnt]# sh ip_check.sh

這裡寫圖片描述

八、指令碼中的函式

編寫指令碼:利用函式迴圈檢測檔案型別

[root@localhost mnt]# vim file_check.sh

這裡寫圖片描述

[root@localhost mnt]# sh file_check.sh /etc/system-release
[root@localhost mnt]# sh file_check.sh /etc/passwd

這裡寫圖片描述

利用指令碼根據函式建立使用者刪除使用者,並設定密碼

[root@localhost mnt]# vim user_ctl.sh

這裡寫圖片描述

[root@localhost mnt]# sh user_ctl.sh   ##呼叫指令碼

這裡寫圖片描述

相關推薦

Linux---shell變數指令碼函式

一、什麼是變數? shell在定義變數的時候,變數名與變數之間不能存在空格,這個大多數的語言的這個不同還是蠻大的,不過定義的規則就其他的語言定義的規則大致相同了。 1) 區域性變數 區域性變數在指令碼或命令中定義,僅在當前shell例項中有效,其他shel

linux——shell變數函式

shell變數 1.變數定義:     變數即在程式執行過程中它的值是允許改變的量,變數是用一串固定的字元來標誌不固定的值的一種方法,變數是一種使用方便的佔位符,用於引用計算機記憶體地址,該地址可以儲存scripts執行時可更改的程式資訊。在she

shell指令碼函式的呼叫

函式 : 把一個功能封裝起來,使用時直接呼叫函式名,這樣的指令碼好處:模組化,程式碼可讀性強,擴充套件性方便函式的定義     在shell 中有兩種定義函式的語法格式,分別為:        函式名()        {          命令序列          } 

shell指令碼函式呼叫的返回值,以及退出狀態問題

     最近開始學習shell指令碼,由於之前沒怎麼接觸過linux和shell,所以一切從頭開始學起      shell指令碼編寫方法與程式設計類似,只是趨向於面向物件程式設計(個人理解,如果錯誤,麻煩各位老鳥指出)。其他關於shell指令碼到底是怎麼樣的一個東西大家

javascript的私有變數如何在函式外部引用這些變數

私有變數 任何在函式中定義的變數,都可認為是私有變數,因為不能在函式外部訪問這些變數。私有變數包括函式的引數、區域性變數、在函式內部定義的其它函式。 如下程式碼: function add(bum1,num2){ var sum=num1+num2;

利用VS2010生成DLL檔案DLL函式和全域性變數的使用

一、首先利用VS2010生成DLL檔案,步驟如下 1、開啟VS2010,在左邊的框欄中選擇C++,中間選擇win32控制檯應用程式,如下圖 2、確認後,彈出下面對話方塊 3、選擇下一步,彈出如

awk使用shell變數shell使用awk變數

在寫shell指令碼時,經常會使用到awk程式。但是有些複雜的邏輯,可能需要在awk中使用在shell中定義的變數,而且awk程式處理之後,產生的中間變數,還需要在shell中繼續處理。 一、那如何在awk中使用在shell中定義的變數呢? 方法一:使用"'把shell

Shell-case:指令碼在yum安裝軟體包前如何對環境進行檢測

      最近一直忙於學習Linux的知識,寫了不少東西都是自己當天學的Linux知識,還有一些自己當天的知識總結,已經很久沒有寫過正兒八經寫寫自己研究分析出來的演算法,這個國慶節沒什麼事做,就一些具體的需求,做了點研究,結合學過的shell指令碼的知識,做了幾個指令

指令碼函式的基本寫法

例題:   大過程                       &

linux shell變數

shell簡介 是應用程式,該程式提供了一個介面,使用者通過這個介面訪問作業系統核心服務。 linux的shell分類: Bourne Shell (/usr/bin/sh或、/bin/sh) - Bourne again Shell (/bin/bash)—

linux Shell命令功能

1.命令補全          Tab 單擊補全命令   雙擊顯示經智慧匹配推測可能的命令 2.命令歷史          檢視 history           清空 history -c 3.命令別名          檢視 alias          

linux shell 變數子串

linx變數子串 在本例子中,變數 test=https://www.//cnblogs./com//jjmaokk/p/10135401.html 1,${#parameter} 返回變數$parameter內容的長度(按字元),也適用於特殊變數 例: [[email protected]

linux shell程序監視指令碼

用linux那麼久,到現在算是能寫出來一點實用的指令碼。記錄一下。 這個指令碼用來監視TARGET指明的程式,如果程式沒有執行,則執行相應的啟動指令碼run.sh。並且,如果程序的cpu使用率達不到預期,可以殺死程序重新啟動程式。功能比較簡單,穩定性還在測試當中,run.sh裡面可以簡單的寫一

Linux 下查詢 .so 檔案函式入口

有時候會想知道 .so 檔案中某些資訊,比如版本,函式入口等。strings 命令是個很有用的命令,比如我想知道 libstdc++.so 這個動態庫裡面是否有 refill 函式,可以用 $ strings libstdc++.so | grep ref

Linux Shell筆記之指令碼控制

1.處理訊號 訊號   值               描述 1       SIGHUP      掛起程序 2       SIGINT         終止程序 3       SIGQUIT      停止程序 9       SIGKILL       無條件終止程序 15     SIGTERM

Linux Shell 變數自加

declare -i iv=$svnv let iv+=1 shell中變數自增的實現方法 Linux Shell中寫迴圈時,常常要用到變數的自增,現在總結一下整型變數自增的方法。 我所知道的,bash中,目前有五種方法: 1. i=`expr $i + 1`; 2. le

如何在linux命令列(非指令碼)迴圈執行命令------相見恨晚的watch命令

       無論是linux開發, 測試還是運維, 很多時候, 我們需要監控狀態的動態變化, 比如, 要看記憶體的使用情況, 可以用free命令, 但問題是, 必須每次手動不停地去執行。 有的朋友可能說, 用top啊。 這樣確實可以, 但是, 很多時候並沒有動態命令, 貌

Linux shell刪除當前目錄最早的多個檔案

#!/bin/bash echo "請您輸入你想刪除的檔案個數(時間越早的檔案靠前):" read file_num total_file_num=`ls -l | grep "^d" | wc -

Linux Shell程式設計--入門指令碼

    shell 核心介於使用者和kernel核心之間的介面,shell 殼保護內部的核kernel,使用shell程式設計類似於DOS中的批處理檔案,稱為shell script,又叫shell命令檔案。從程式設計師的角度來看, Shell本身是一種用C語言編寫的程式,

ORACLE建立包和包體函式和儲存過程

背景:在Oracle資料庫建立包,在包建立函式Function和儲存過程Procedure。在java專案中呼叫。 建立包,並在下面宣告包含的函式和儲存過程: create or replace p