變量有關內容linux
內容:shell
1. 變量的介紹express
2. 變量的分類vim
3. awk計算bash
4. vim中編輯文本技巧ide
5. 定義變量spa
lidao=1命令行
###祕籍server
藏經閣裏面的武功祕籍 書籍的名字 新版葵花寶典 ==== 變量名字 lidao blog
查看 書籍 新版葵花寶典 ==== 查看變量裏面的內容 $lidao
向書籍 加入新的內容 ==== 向變量中放入內容 lidao=12
[root@oldboyedu-39-nb scripts]# lidao=lidao.blog.51cto.com [root@oldboyedu-39-nb scripts]# echo $lidao lidao.blog.51cto.com |
${}先後是兩部分,用於分隔 -------金庸新著
[root@oldboyedu-39-nb ~]# week=10 [root@oldboyedu-39-nb ~]# echo $week 10 [root@oldboyedu-39-nb ~]# echo $weekday 系統認爲weekday是個變量 [root@oldboyedu-39-nb ~]# echo ${week}day 全部用花括號括起來 10day |
環境變量 普通變量 特殊變量($n $0 $# $?)
env 只顯示全局變量
自定義環境變量 放入 /etc/profile 永久生效
OLDBOY=blog.oldboyedu.com 建議全部環境變量名均爲大寫
export OLDBOY=blog.oldboyedu.com 用export命令定義變量,在哪裏shell都能用
運行腳本至關於換了條線路 ---在當前shell中新打開一個子shell
永久生效 /etc/profile
[root@oldboyedu43-lnb scripts]# OLDBOY=10 定義普通變量 [root@oldboyedu43-lnb scripts]# echo $OLDBOY 在當前shell讀取變量√√√√ 10 [root@oldboyedu43-lnb scripts]# cat env.sh 把普通變量寫進腳本 #!/bin/bash echo $OLDBOY [root@oldboyedu43-lnb scripts]# sh env.sh 不能夠運行,腳本至關於又打開一個子shell
[root@oldboyedu43-lnb scripts]# sh -x env.sh -x 顯示腳本運行過程 + echo [root@oldboy-gao oldboy]# source env.sh source能夠運行腳本中的普通變量 10 [root@oldboyedu43-lnb scripts]# env |grep OLDBOY env查看系統存在的環境變量 [root@oldboyedu43-lnb scripts]# export OLDBOY=10 定義環境變量 [root@oldboyedu43-lnb scripts]# env |grep OLDBOY env能夠查看 OLDBOY=10 [root@oldboyedu43-lnb scripts]# sh env.sh 當前環境下任何子shell能夠運行變量 10 |
1.全局環境變量配置文件
/etc/profile、/etc/bashrc、/etc/profile.d/(用戶登陸到系統 會運行這個目錄下面的腳本或命令)
2.用戶環境變量配置文件
~/.bash_profile、~/.bashrc
3. /etc/profile.d 和/etc/motd 區別
/etc/motd 文件,寫啥顯示啥(大佛)
sl 小火車
cowsay ×××牛
讓用戶登陸時運行cowsay命令
[root@oldboy-gao ~]# cat /etc/profile.d/cowsay.sh 把命令寫進腳本放到/etc/profile.d目錄下 #!/bin/bash /usr/bin/cowsay 啦啦啦 [root@oldboy-gao ~]# chmod +x /etc/profile.d/cowsay.sh 給腳本x權限 [root@oldboy-gao ~]# ll /etc/profile.d/cowsay.sh -rwxr-xr-x. 1 root root 47 Jan 13 06:35 /etc/profile.d/cowsay.sh |
shell經過環境變量來肯定登陸用戶名,命令路徑,終端類型,登陸目錄等
LANG PATH SHELL UID HOSTNAME
取消變量 unset OLDBOY=1
gao=1 若是不用export,,直接定義 ---局部變量(普通變量)
[root@oldboy-gao ~]# sh /server/scripts/show.sh
變量不能被執行由於在新的子shell
字母 數字 下劃線
數字不能打頭
小結:
1.sed 查找 刪除 替換
不刪除 不替換
2.精簡linux開機自啓動服務
3.shell-什麼是變量
4.分類-環境變量(全局)
5.如何創造一個環境變量 export 放在/etc/profile
6.普通變量-$ ${} 金庸新著 {金庸新}著
[root@oldboy-gao ~]# awk 'BEGIN{print 3+2,3-1}'
5 2
第一個里程碑:awk -v 定義一些 awk本身用的變量 一個v定義一個變量
shell腳本中$1表示腳本的第一個參數
[root@oldboy-gao ~]# cat /server/scripts/cal.sh #!/bin/bash num1=$1 num2=$2
awk -vn1=$num1 -vn2=$num2 'BEGIN{print n1-n2}' awk -vn1=$num1 -vn2=$num2 'BEGIN{print n1+n2}' awk -vn1=$num1 -vn2=$num2 'BEGIN{print n1*n2}' awk -vn1=$num1 -vn2=$num2 'BEGIN{print n1/n2}' [root@oldboy-gao ~]# sh /server/scripts/cal.sh 1 2 -1 3 2 0.5 |
操做方法:
1. 確保不是編輯模式
2. Ctrl +v 上下鍵選擇你要編輯的行
3. 按大寫I
4. 輸入內容
5. 按esc
Ctrl +v 並選擇你要編輯的行
按delete刪除
$1 --$數字 $# $?
$0 腳本的名字
$# 腳本參數的個數
第二個里程碑:$1 $2 ---$數字
在linux腳本中 $1 表示這個腳本的第一個參數
腳本與命令行的橋樑 中介 使用腳本的時候 把命令的內容傳入到腳本中
[root@oldboy-gao ~]# cat /server/scripts/show.sh #!/bin/bash echo $1 $2 [root@oldboy-gao ~]# sh /server/scripts/show.sh
[root@oldboy-gao ~]# sh /server/scripts/show.sh a b a b |
例:計算 1+2
[root@oldboyedu-39-nb ~]# echo 1+2 1+2 [root@oldboyedu-39-nb ~]# echo 1+2|bc 3 [root@oldboyedu-39-nb ~]# echo $((1+2)) 3 [root@oldboyedu-39-nb ~]# echo $((3+4)) 兩個小括號 7 [root@oldboyedu-39-nb ~]# echo $((a+b)) 0 ##使用變量省事 方便 [root@oldboyedu-39-nb ~]# a=1 [root@oldboyedu-39-nb ~]# b=2 [root@oldboyedu-39-nb ~]# echo $((a+b)) 3 能不能更簡便一些呢 [root@oldboyedu-39-nb ~]# cat /server/scripts/cal.sh #!/bin/bash a=$1 a表明第一個參數 b=$2 b表明第二個參數 echo $((a+b))
[root@oldboyedu-39-nb ~]# sh /server/scripts/cal.sh a b ###必須是數字 /server/scripts/cal.sh: line 4: a: expression recursion level exceeded (error token is "a") [root@oldboyedu-39-nb ~]# sh /server/scripts/cal.sh 20 30000 30020 [root@oldboyedu-39-nb ~]# #sh /server/scripts/cal.sh 20 30000 [root@oldboyedu-39-nb ~]# ### $1 $2 空格分隔每一個參數 |
練習:
##要求:給cal2.sh腳本傳入三個參數 ,顯示三個參數相乘的結果
[root@oldboyedu-39-nb ~]# sh /server/scripts/cal2.sh 10 20 30 6000 [root@oldboyedu-39-nb ~]# cat /server/scripts/cal2.sh #!/bin/bash a=$1 b=$2 c=$3 echo $((a*b*c)) |
第三個里程碑:$# 表示你這個腳本一共有多少個參數 參數的個數
用這個腳本文件show.sh
[root@oldboyedu-39-nb scripts]# cat show.sh #!/bin/bash echo $1 $2 $3 echo $# [root@oldboyedu-39-nb scripts]# sh show.sh a b c a b c 3 輸出參數的個數 [root@oldboyedu-39-nb scripts]# sh show.sh a b c b d df ef d a b c 8 |
第四個里程碑: $? 顯示上一個命令是否執行成功 若是命令執行成功 會顯示0 若是命令執行失敗,則會顯示不是0
若是是0,成功了 若是不是0就失敗了。
[root@oldboyedu-39-nb scripts]# echo hello hello [root@oldboyedu-39-nb scripts]# echo $? 0 [root@oldboyedu-39-nb scripts]# echo hello [root@oldboyedu-39-nb scripts]# ho hello -bash: ho: command not found [root@oldboyedu-39-nb scripts]# echo $? 127 |
小結
###$1 $2 {$數字 $# } (通常放腳本里) $? (哪均可以) 含義
第五個里程碑:$0 顯示文件名
1) name= 普通變量
2) read 從命令行讀取內容放到變量中
-p 「提示語句」 , 則屏幕就會輸出提示語句
-t 等待時間
-s 關閉回顯,用於密碼輸入
效果: read -p 「請輸入你的用戶名」 user
read -s -p 「請輸入你的密碼」 pass
[root@oldboy-gao ~]# read oldboy lalala 倆個命令效果相同 [root@oldboy-gao ~]# oldboy=lalal |
[root@oldboyedu-39-nb scripts]# read -p "please input :" oldboy 編輯提示信息
please input :oldboyedu.com 變量
[root@oldboyedu-39-nb scripts]# echo $oldboy
oldboyedu.com
實例2-1 把cal.sh腳本從$1 $2參數傳遞方式 改成 使用read命令方式(必需要會)
[root@oldboy-gao oldboy]# cat /server/scripts/cal.sh #!/bin/bash read -t5 -p "input n1 n2:" num1 num2 -p 參數 放最後面 awk -vn1=$num1 -vn2=$num2 'BEGIN{print n1-n2}' awk -vn1=$num1 -vn2=$num2 'BEGIN{print n1+n2}' awk -vn1=$num1 -vn2=$num2 'BEGIN{print n1*n2}' awk -vn1=$num1 -vn2=$num2 'BEGIN{print n1/n2}' [root@oldboy-gao oldboy]# sh /server/scripts/cal.sh input n1 n2: 100 22 78 122 2200 4.54545 |