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