shell腳本編程基礎

shell腳本編程基礎以及一些基本的邏輯運算知識和shell的配置用戶環境。

編程基礎

一個程序的基本格式是由“指令+數據”組成,有些程序編程側重于指令,數據服務于指令,我們稱之為過程式編程(JAVA、C語言等)。而我們所學習的shell編程是以數據為中心,以指令服務于數據的對象式。

shell腳本基礎

一個符合特定格式并包含包含命令和說明的文本文件。

首行格式:shebang機制

每個shell腳本的第一行必須遵循shebang機制,以bash腳本為例 ,首行開頭必須是“#!/bin/bash”,通過這個機制我們可以初步了解是何種類型的腳本。

在腳本中以“#”開頭的行都表示注釋,便于說明腳本的每一步操作。這些行在運行腳本是不會顯示。

我們可以通過vim編輯器創建腳本,腳本格式

其中第一行是shebang機制,第二行是對腳本的簡單說明,第三行是命令來顯示“it is a simple script”。保存后,一個基本的腳本就完成了。這時的腳本還不可用,還需給予執行權限后方可執行。執行效果如下:加權限

這就是腳本的最基本形式。

在編寫完腳本后,我們可以通過“bash -n”來檢測是否存在語法錯誤。

腳本的用途

自動化常用命令
?執行系統管理和故障排除
創建簡單的應用程序
處理文本或文件

編程的基礎知識

變量的基本概念

變量是一種使用方便的占位符,用于引用計算機內存地址,該地址可以存儲腳本運行時可更改的程序信息。變量通常用在腳本中的賦值運算,文本表示中。

在bash中使用的變量都是弱類型變量(不需事先指定類型,默認字符型,在進行計算時自動進行轉換,)且不支持浮點數。

變量的命名規則:

不可使用程序中的保留字,避免混淆

不可以數字開頭

通俗易懂,見名知意

駝峰命名法

幾種不同的變量

(1)局部變量:僅在當前shell范圍下生效。對子shell無效,通過“set”查看所有變量,通過“unset name”刪除指定的變量。

(2)環境變量:在當前shell及子shell范圍下生效。通過“export”和“declear -x”來定義環境變量,可通過“env”,“printenv”,“export”和“declare -x”來查看所有環境變量。

(3)本地變量:又稱為常量,不可修改或刪除。通過“readonly”和“declear -r”來定義本地變量,可通過“readonly -p”來查看所有本地變量。

(4)位置變量:在腳本中需要多個參數時,每一個變量所對應的參數。

$1表示第一個參數,$2表示第二個參數……;$#表示所有參數的個數;$0表示腳本的名稱($0表示完整路徑,‘basename $0表示基名’);$@和$*都表示所有參數,不同的是$@是將所有參數都作為獨立的參數而$*將所有參數看成一個整體。

shift[n]可使第n+1個參數替換第一個參數,第n+2個參數替換為第二個參數,以此類推?!皊et –”可清除所有位置變量。

算術運算

+ (加)? -(減)? *(乘)?? /(除)? **(乘方) %(取余)

算術運算

let var=算數表達式(可不加’$’)

var=$[算術表達式](加$)

var=$((算術表達式))(加$)

增強型賦值

i+=3?? 等同于?? i=i+3

i++ ? ? 等同于? i=i+1(先取值再+1)

++i?? 等同于???? i+1=i(先+1再取值)

邏輯運算

true=1,false=0

或(|)?????????????????????????????????????????? 與(&) ? ? ? ? ? ? ? ? ? ? ? ? ? 非(!)

0|0=0 ? ? ? ? ? ? ? ????????????????????????? 0&0=0??????????????????????????????????? !0=1

1|0=1?????????????????????????????????????????? 1&0=0??????????????????????????????????? !1=0

0|1=1?????????????????????????????????????????? 0&1=0

1|1=1?????????????????????????????????????????? 1&1=1

短路運算

短路或(||)

cmd1||cmd2? 當cmd1為1時將不執行cmd2,當cmd1為0時執行cmd2。

短路與(&&)

cmd1&&cmd2 當cmd1為0時將不執行cmd2,當cmd1為1時執行cmd2。

異或(^)

相同為0,不同為1。

條件測試

在腳本中根據默寫特定的需要來測試命令是否執行時,可使用條件測試來確定是否執行。

測試命令:

[??? ]

[[ ? ]]

中括號的兩邊需空格

可以進行數值測試

數值比較

也可以進行字符串測試字符串測試

其中“[[? ? =~? ? ]]”支持擴展正則表達式

擴展

還可以測試文件類型以及文件權限等。

使用read命令來接受輸入

從標準輸入中讀取數值,將每個數值分配給一個變量,所有剩余的單詞都被分配到最后一個變量。重定向輸入時,默認read只會讀取重定向的第一行。

bash命令行的優先級定義

把命令行分成單個命令詞
展開別名
?展開大括號的聲明({}
展開波浪符聲明(~
命令替換$()
再次把命令行分成命令詞
展開文件通配(*、 ?、 [abc]等等)
準備I/0重導向(<、 >
運行命令

bash的配置文件

用戶登錄時讀取的配置文件,針對所有用戶的配置文件存放在“/etc/profile、/etc/profile.d/*、/etc/bashrc中”,個人配置文件存放在“~/.bash_profile和~/.bashrc中”

 

 

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

(0)
yoyiccccyoyicccc
上一篇 2017-11-26 19:42
下一篇 2017-11-26 20:44

相關推薦

  • 從Linux小白到大牛——與狼共舞的日子13

    馬哥教育網絡班21期+第13周課程練習 1、建立samba共享,共享目錄為/data,要求:(描述完整的過程) 1)共享名為shared,工作組為magedu; 2)添加組develop,添加用戶gentoo,centos和ubuntu,其中gentoo和centos以develop為附加組,ubuntu不屬于develop組;密碼均為用戶名; 3)添加sa…

    Linux干貨 2017-01-03
  • 第一周隨記。

    始 .仲夏之末  ———隨記心情 去年仲夏我在鄭州富士康過著自己不喜歡的日子,做著自己不情愿做的事情。 有可能回到學校的日子才是我最想要的吧。 五月的驕陽也是那么炙熱,緩緩升起,就像想穿進我們宿舍普及到每個人身上,然宿舍有空調豈會怕你這點小小余輝。 總感覺腦子里始終有一種什么意念在召喚著我,原來該上課了…

    Linux干貨 2017-07-15
  • 馬哥教育網絡班第21期+第四周課程作業

    1. 復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 cp -r /etc/skel /home/tuser1 chmod –R 700 /home/tuser1 2. 編輯/etc/group文件,添加組hadoop。 echo &q…

    Linux干貨 2016-08-01
  • 配置正、反向解析域,主從配置,子域授權

    配置解析一個正向區域:     1、定義區域        在主配置文件中(/etc/named.conf)或主配置文件輔助配置文件(/etc/named.rfc1912.conf)中實現:     (1) 在/etc/…

    Linux干貨 2017-05-31
  • 制作epel源

    在linux的使用過程中,ISO鏡像的rpm包并不是十分的齊全。這個時候就需要去epel源去下載安裝rpm包安裝。這里簡單的描述下epel源的配置方法。僅供參考。 1.關閉SELinuxsed -i.bak ‘s/SELINUX=enforcing/SELINUX=permissive/’ /etc/selinux/config se…

    2017-12-18
  • 磁盤管理

    設備類型分為字符設備和塊設備 主設備號用來標識設備類型,次設備號標識同一類型下的不同設備 硬盤設備命名: scsi,sata,sas,usb:/dev/sd 不同設備/dev/sda  /dev/sdb 同一設備不同分區:/dev/sda1,/dev/sdb2…… 硬盤: 一片磁盤的一面叫做盤面,一張盤片有兩個盤面 每個盤面有一個磁頭,最多有256…

    Linux干貨 2016-08-30
欧美性久久久久