一、shell編程
shell編程就是對一堆Linux命令的邏輯化處理
1. 變量
(1) 定義變量,類如:name=”zhao” ,”=”兩邊不用空格隔開,后面的變量需要使用” “,否則會 ? ? ? ? ? ? ? ? ? ? ? ? ? ?有可能出現錯誤;
可以使用echo 來顯示變量的值:echo $變量名,類如:
(2)可以使用$來引用系統中已經存在的變量、常量,類如顯示$ PS1:
(3)可以使用命令來當變量,是一種命令調用命令的形式:
(4)同樣的也可以使用文章當作變量
(5)unset 是用來刪除變量的,unset 變量名 ,類如unset $name:
(6)進程的相關知識:
用pstree可以查看當前的進程樹
用echo $$可以查看當前的進程數
(7)
局部變量:生效的范圍為當前的進程,對其他進程包括當前進程的子進程都無效
環境變量(全局變量):生效范圍為當前進程及其子進程都有效
環境變量的定義有兩種:(1)使用export name=VALUE
(2)使用declare -x name=VALUE
export name=”zhao”
declare -x name=”lg”
(8)set 查看系統中所有的變量,函數,用export,declare和env查看系統中的環境變量
(9)只讀模式(常量)只能聲明,但不能修改,其的定義,有兩種:
(1)readonly name=“VALUE”
(2)declare -r name=“VALUE”
使用readonly -p 查看只讀模式
(10)注意點()? ? ? ? ? ? ? ? ??? ? ? ? ? ? ? ? ? ? ? ??
2.shell編程
(1)使用程序來查看環境變量:
#!/bin/bash
n=son
echo “p.sh:name=$n” ? ? ? ? ? ? ? ? ? ? ? ? ? ??echo “son=$n”
son.sh
(2)編寫腳本/root/bin/systminfo.sh,顯示出當前主機系統信息:
#!/bin/bash
echo “The informations :
the hostname is:`hostname`
the IPv4 is:`ifconfig ens33|grep -o “[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ?[0-9]\{1,3\}”|head -n1`
the system release is:`cat \/etc\/centos-release`
the banben is :`uname -r`
the CPU is :`lscpu|grep “Model name”|cut -d: -f2`
the neicun is :
`df -h |grep “/dev/sda*”`
(3)編寫腳本/root/bin/backup.sh,可實現每天將/etc/目錄下備份到/root/etcYYYY-mm-dd中:
(4)編寫腳本/root/bin/disk.sh,顯示當前硬盤分區 中空間利用率最大的值:
#!/bin/bash
df -h |grep sda*|tr -s ” “|cut -d ” ” -f5|sort -n|tail -n1
(5)退出狀態值
0代表成功,1-255代表失敗,也可以通過exit[n]來自己設定值
使用$?來保存最近的命令退出狀態
(6)位置 變量:在腳本的代碼中調用命令行傳遞給腳本的參數
$1代表第一個參數,$2代表第二個參數,$n代表第n個參數
$0:命令本身 , $*代表傳遞給腳本的所有命令
$@:傳遞給腳本的所有參數,每個參數是一個獨立的參數
set清空所有的變量
(7)新建文件,自動添加文件介紹等內容:
#!/bin/bash
date=`date +%F`
echo “#Filename: $1”
echo “#Revision: 1.0”
echo “#Language: bash shell”
echo “#Author : $2”
echo “#Date : $date”
touch $1
chmod +x $1
vim $1 +
4. ?bash中的算數運算:
(1)bash中支持:+,-,*,/,% ,**等運算
(2)let var=表達式
(3)$[ 表達式]
(4)$((表達式))
(5)expr 是一個命令,所以參數之間需要分開
(6)echo ?“算數表達式”| bc
(7)自增自減
++ ? ?— ? ?+= ? ?-+
”
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88829