20171123 Shell編程

Shell編程的基本知識點

一、shell編程

shell編程就是對一堆Linux命令的邏輯化處理

1. 變量

(1) 定義變量,類如:name=”zhao” ,”=”兩邊不用空格隔開,后面的變量需要使用” “,否則會 ? ? ? ? ? ? ? ? ? ? ? ? ? ?有可能出現錯誤;

shell2

可以使用echo 來顯示變量的值:echo $變量名,類如:

s1

(2)可以使用$來引用系統中已經存在的變量、常量,類如顯示$ PS1:

s2

(3)可以使用命令來當變量,是一種命令調用命令的形式:

s3

(4)同樣的也可以使用文章當作變量

s4

(5)unset 是用來刪除變量的,unset 變量名 ,類如unset $name:

s5

(6)進程的相關知識:

用pstree可以查看當前的進程樹

用echo $$可以查看當前的進程數

(7)

局部變量:生效的范圍為當前的進程,對其他進程包括當前進程的子進程都無效

s6

環境變量(全局變量):生效范圍為當前進程及其子進程都有效

環境變量的定義有兩種:(1)使用export name=VALUE

(2)使用declare -x name=VALUE

export name=”zhao”

declare -x name=”lg”

s7

s8

(8)set 查看系統中所有的變量,函數,用export,declare和env查看系統中的環境變量

(9)只讀模式(常量)只能聲明,但不能修改,其的定義,有兩種:

(1)readonly name=“VALUE”

(2)declare -r name=“VALUE”

s9

使用readonly -p 查看只讀模式

(10)注意點()? ? ? ? ? ? ? ? ??? ? ? ? ? ? ? ? ? ? ? ??sh

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中:

sh2

(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清空所有的變量

sh3

(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=表達式

sh4

(3)$[ 表達式]

sh5

(4)$((表達式))

sh6

(5)expr 是一個命令,所以參數之間需要分開

sh7

(6)echo ?“算數表達式”| bc

sh8

(7)自增自減

++ ? ?— ? ?+= ? ?-+

sh9

 

 

 

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88829

(0)
zss123456zss123456
上一篇 2017-11-23 16:50
下一篇 2017-11-23

相關推薦

  • 新鮮出爐的一篇好PPT,MySQL Optimizer團隊力作

    新鮮出爐的一篇好PPT,MySQL Optimizer團隊Senior Principal Software Engineer ?ystein同學親自操刀完成的《How to Analyze and Tune MySQL Queries for Better Performance》內容值得期待,有實現分析,有實戰用例。有需要的朋友可以點擊下載! 下載地址:…

    Linux干貨 2015-02-27
  • Linux 之LVM

    一 LVM 簡介:     LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,LVM將一個或多個硬盤的分區在邏輯上集合,相當于一個大硬盤來使用,當硬盤的空間不夠使用的時候,可以繼續將其它的硬盤的分區加入其中,這樣可以實現磁盤空間的動態管理,相對于普通的磁盤分區有很大的靈活性。LVM的工作原理其…

    Linux干貨 2016-03-01
  • LVS的詳細應用

    LVS是Linux Virtual Server的簡寫, 意思是Linux虛擬服務器, 是一個虛擬的服務器集群系統. LVS的宗旨:    1. 使用集群技術和Linux操作系統實現一個高性能, 高可用的服務器;    2. 很好的可伸縮性(Scalability);    3. 很好的可靠性(Re…

    Linux干貨 2016-12-05
  • Mysql備份II

    Mysql備份II V.II.I單臺或共用機器,數據量和訪問量小50G< 1 Mysqldump(全導出,導庫,導表) 鎖表 如果這時有些入會鎖住或者超時 2 至少停止寫入 防止innodb配置還沒刷到磁盤里 先flash tables /usr/local/mysql/bin/mysqladmin -S /tmp/mysql.so…

    Linux干貨 2016-06-09
欧美性久久久久