【Linux】shell腳本基礎-變量

文章目錄
mysql

    • 特殊變量實例
    • 變量的命名與規則:
    • 1) 變量規則測試
    • 2) 關於${} 的使用,拼接測試
    • 3)**能不能不加{}?**
    • 4) 使用反引號或者$()
    • 5) 特殊用法
    • 6) 單引號和雙引號的區別
    • 1. 按照變量的做用分
    • 2. 按照變量的做用域分:
    • 什麼是變量?
    • 變量分類:
    • 環境變量
    • 用戶定義變量
    • 特殊變量
    • 變量的案例
    • 總結


什麼是變量?

變量是任何一門語言中都不可缺乏的組成部分,用於存放各類數據。 腳本語言在使用變量前一般不須要聲明類型,只須要直接賦值便可。
環境變量: 有一些特殊的變量會被shell腳本或者操做系統環境用來存儲一些特別的值,這類變量被稱爲環境變量,也有人叫系統變量。linux

變量分類:

1. 按照變量的做用分
  • 一、用戶自定義變量
  • 二、環境變量:這種變量中主要保存的是和系統操做環境相關的數據。
  • 3.位置參數變量:這種變量主要是用來向腳本當中傳遞參數或數據的,變量名不能自定義,變量做用是固定的。
  • 四、預約義變量:是Bash中已經定義好的變量,變量名不能自定義,變量做用也是固定的。
2. 按照變量的做用域分:
  • 全局變量
    全局變量是環境變量,其值不隨shell 腳本的執行結束而消失。
  • 局部變量
    局部變量是shell 程序內部定義的,其使用範圍僅限於定義它的程序,對其它程序不可見。包括:用戶自定義變量、位置變量和預約義變量。

環境變量

系統定義的變量 意義
BASH=/bin/bash Bash Shell 名稱
BASH_VERSION=4.1.2(1) Bash 版本
HOME=/home/linuxtechi 用戶家目錄
LOGNAME=LinuxTechi 當前登陸用戶的名字
OSTYPE=Linux 操做系統類型
PATH=/usr/bin:/sbin:/bin:/usr/sbin 可執行文件搜索路徑
PWD=/home/linuxtechi 當前工做目錄
SHELL=/bin/bash Shell 名稱
USERNAME=linuxtechi 當前登陸的用戶名
[root@ecs-c13b ~]# echo $BASH/bin/bash[root@ecs-c13b ~]# echo $OSTYPElinux-gnu[root@ecs-c13b ~]#

咱們能夠查看與進程相關的環境變量:sql

[root@ecs-c13b ~]# pgrep sshd2970
29858[root@ecs-c13b ~]# cat /proc/2970/environ LANG=en_US.UTF-8PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/binNOTIFY_SOCKET=/run/systemd/notifySSH_USE_STRONG_RNG=0[root@ecs-c13b ~]#

用戶定義變量

變量的命名與規則:
  1. 變量由字母或者下劃線打頭,不容許數字開頭,後面由字母,數字或者下劃線組成,而且大小寫意義不一樣。
  2. 在使用變量時候,須要在變量名字前面加$
  3. 等號兩邊不能有空格
  4. 變量值的疊加,使用${}
  5. 命令替換,使用$()或者反引號
1) 變量規則測試
[root@ecs-c13b ~]# 2eee=4      ## 不能以數字開頭-bash: 2eee=4: command not found[root@ecs-c13b ~]# name=zhangshan   ### 大小寫的區別[root@ecs-c13b ~]# NAME=lisi[root@ecs-c13b ~]# echo $namezhangshan[root@ecs-c13b ~]# echo $NAMElisi

2) 關於${} 的使用,拼接測試
[root@ecs-c13b ~]# ctest=mysql[root@ecs-c13b ~]# echo $ctestmysql[root@ecs-c13b ~]# echo $ctest-txtmysql-txt[root@ecs-c13b ~]# echo $ctest.db.log-txtmysql.db.log-txt[root@ecs-c13b ~]# echo {$ctest}db.log{mysql}db.log[root@ecs-c13b ~]# echo ${ctest}db.logmysqldb.log

3)能不能不加{}?
[root@ecs-c13b ~]# echo $ctestdb.log-txt.log-txt

4) 使用反引號或者$()

[root@ecs-c13b ~]# echo date
date
[root@ecs-c13b ~]# echo $(date)
Wed Aug 5 15:53:03 CST 2020
[root@ecs-c13b ~]# echo date
Wed Aug 5 15:53:15 CST 2020
[root@ecs-c13b ~]#shell

5) 特殊用法
[root@ecs-c13b ~]# date +"%Y-%m"2020-08[root@ecs-c13b ~]# date +"%Y-%m-%d-%H%M%S"2020-08-05-155600[root@ecs-c13b ~]#

date命令加減操做:date +%Y%m%d                   #顯示當天年月日date -d "+1 day" +%Y%m%d       #顯示明天的日期date -d "-1 day" +%Y%m%d       #顯示昨天的日期date -d "-1 month" +%Y%m%d     #顯示上一月的日期date -d "+1 month" +%Y%m%d     #顯示下一月的日期date -d "-1 year" +%Y%m%d      #顯示前一年的日期date -d "+1 year" +%Y%m%d      #顯示下一年的日期

6) 單引號和雙引號的區別
  • ‘’ 在單引號中全部的字符包括特殊字符($,’’,`和\)都將解釋成字符自己而成爲普通字符。
  • 「」 在雙引號中,除了$, ‘’, `和\之外全部的字符都解釋成字符自己,擁有「調用變量的值」、「引用命令」和「轉義符」的特殊含義

注:\轉義符,跟在\以後的特殊符號將失去特殊含義,變爲普通字符。如$將輸出「$」符號,而不當作是變量引用vim

[root@ecs-c13b ~]# name=zmgaosh[root@ecs-c13b ~]# echo $namezmgaosh[root@ecs-c13b ~]# echo '$name'$name[root@ecs-c13b ~]# echo "$name"zmgaosh

特殊變量

特殊變量 含義
$$ Shell自己的PID(ProcessID)
$! Shell最後運行的後臺Process的PID
$? 最後運行的命令的結束代碼(返回值)
$- 使用Set命令設定的Flag一覽
$* 全部參數列表。如"$*「用「」」括起來的狀況、以"$1 $2 … $n"的形式輸出全部參數。
$@ 全部參數列表。如"$@「用「」」括起來的狀況、以"$1" 「                                       2                               "                               …                               "                                    2" … "                       2"…"n」 的形式輸出全部參數。
$# 添加到Shell的參數個數
$0 Shell自己的文件名
$1 到$n 添加到Shell的各參數值。$1是第1參數、$2是第2參數…。
特殊變量實例
[root@ecs-c13b ~]# vim ex1[root@ecs-c13b ~]# chmod +x ex1 [root@ecs-c13b ~]# ./ex1 11  12 14Shell 傳遞參數實例!
執行的文件名:./ex1
第一個參數爲:11
第二個參數爲:12
第三個參數爲:14[root@ecs-c13b ~]#

變量的案例

練習一:
模擬用戶登陸並顯示登陸用戶bash

[root@ecs-c13b ~]# vim login.sh[root@ecs-c13b ~]# bash login.sh 請輸入用戶名: zmgaosh     
請輸入密碼: 123456
Login success,Welcome,zmgaosh[root@ecs-c13b ~]#

總結

本節是按部就班學運維繫列的shell篇-shell變量。 理解了變量對於咱們後面的學習頗有幫助。運維

相關文章
相關標籤/搜索