天天看點

shell基礎技能第四章 更多的bash shell指令10.1.5 查找和替換這是做什麼的腳本 #這句是描述腳本的用意。這是做什麼的腳本 #這句是描述腳本的用意。

#周遊目錄

cd

#1.絕對路徑

/usr/bin

#2.相對路徑

cd . #單點表示目前目錄

cd … #雙點表示目前目錄的父目錄

pwd #表示目前路徑的全路徑是什麼?

#3.5檔案和目錄清單

#3.5.1 基本清單功能

ls #是最基本的形式顯示目前目錄下的檔案和目錄,按字母排序

ls -F #-F參數在目錄後面加(/),來分辨檔案和目錄。

ls -a #所有點開頭的檔案現在都顯示出來。

ls -F -R #-R參數是遞歸選項 ,列出目前目錄下包含的子目錄中的檔案。

#3.5.2顯示長清單

ls -l #-l是長清單輸出,顯示清單檔案的資訊。

#3.5.3過濾輸出清單

ls -l my_script #my_script是具體指定的檔案或者目錄名字。

ls -l my?pt #?表示中間一個字元的随機。

ls -l my*pt #表示中間多個字元随機。

ls -l my #後面随機

ls -l my_[ai]pt #[ai]表示統配a和i字母的檔案或者目錄。

ls -l my_[a-i]pt #[a-i]表示統配a到i的檔案和目錄。

ls -l my_[!a]pt #[!a]表示不是a的檔案和目錄。

#3.6處理檔案和目錄

#3.6.1 建立檔案

touch zhj #建立zhj的空檔案,同時還可以修改檔案的建立時間。

ls -l zhj #顯示zhj檔案的細節。

#3.6.2 複制檔案

cp 源 目标 #源和目标都是檔案名字時,是将源檔案複制文新的檔案,并以目标檔案命名。

cp -i 源 目标 #-i是詢問是否覆寫目标檔案。

cp -R Script #使用 -R 遞歸複制整個目錄的内容。

cp -R script/ Mod_Script #把整個script檔案複制到 Mod_Script中。

cp -R *script/ Mod_Script #把整個script結尾的檔案複制到 Mod_Script中。

#3.6.3 tab鍵自動補全

#3.6.4 連結檔案

ln -s data_file new_data_file #為符合連結檔案 data_file new_data_file 是倆個不同的檔案。

ln data_file new_data_file #為硬連結,實際上指向上一個實體檔案。

ls -li data_file #-li顯示為data_file的inode編号以及長清單。硬連結共享inode編号。

#3.6.5 重命名檔案

mv fall fzll #把fall檔案重命名為fzll ,mv為moving 的縮寫。但是inode編号實際上不變化,隻是改變了檔案名字。

mv fzll /home/xxx/xxx #表示把fzll檔案移動到 /home/xxx/xxx下,此指令可以用來移動檔案。但是inode編号實際上不變化,隻是移動了檔案位置。

mv /home/xxx1/xxx/fzll.txt /home/xxx2/xxx2/fall.txt #複制移動改變檔案,但是inode沒有變化,隻是改變了檔案位置和檔案名字。

cp /home/xxx1/xxx/fzll.txt /home/xxx2/xxx2/fall.txt #複制移動改變檔案

mv /home/xxx/xxx /home/xxx/xxx2 #移動檔案。

#3.3.6 删除檔案

rm -i fall #删除檔案,-i是提示是否删除。

rm -l fall #删除文檔

rm -f fall #強制删除一些檔案,不需要詢問是否删除。

#3.7 處理目錄

#3.7.1 建立目錄

mkdir new_file #建立目錄

ls -ld new_file

mkdir -p new_file/sub_dir/under_dir #建立多個目錄或者子目錄。使用-p參數

#3.7.2删除目錄

rm -i xxxx #删除xxxx目錄

rm -ri xxxx #可以向下删除目錄

rm -ir xxxx #比較繁瑣。

tree xxxx #檢視xxxx目錄的結構。

rm -rf xxxx #沒有任何提示,超級使用者時候慎用。

#3.8檢視檔案内容

file my_file #檢視檔案的類型。

file /bin/ls #檢視系統需要的類型庫。

#3.8.2 檢視整個檔案

cat test1 #檢視檔案

cat -n test1 #-n 會加上行号

cat -b test1 #-b 是隻給文本内容加上行号。

cat -T test1 #-T 是不顯示制表符

more test1 #顯示每頁資料後停下來。

less test1 #一次顯示一螢幕的資料。

#3.8.3 檢視部分檔案

tail xxx_file #顯示檔案的後十行。

tail -n 3 xxx_file #顯示最後三行

head xxx_file #顯示前10行

head -n 3 xxx_file #顯示最後3行

第四章 更多的bash shell指令

#4.1 監測程式

#4.1.1 探索程序(process)

ps #輸出運作在系統上所有程式資訊。 顯示PID是程序id ,TTY是哪個終端,已經程序所有cpu的時間。

ps -ef #-e參數指定顯示所有運作在系統的程序,-f參數則是擴充了輸出。

ps -l #産生長格式輸出。

#4.1.2 實時監測程序

top #實時顯示程序

#4.1.3 結束程序

kill 進行id #通過id來結束程序。

kill -s HUP 3940 #-S支援指定其他信号

killall http* #killall支援通過程序名字結束程序,也可以使用通配符。

#4.2 監測磁盤空間

#4.2.1 挂載存儲媒體

mount #輸出目前系統挂載的媒體裝置,包括(媒體裝置名字,挂載點,檔案系統類型,已挂載的通路狀态)

mount -t type device directory

mount -t vfat /dev/sdbl /media/disk

unmount #解除安裝裝置

#4.2.2 使用df指令

df #df是檢視磁盤的空間使用情況。

df -h #-h指的是使用者容讀模式顯示

#4.2.3 使用du指令

du #顯示某個特定目錄的磁盤使用情況,預設目前目錄的磁盤檔案情況,參數 -s顯示輸出參數總計 -h按易模式讀取,-c顯示總檔案大小

#4.3 處理資料w檔案

sort file1 #排序檔案内容

sort -n file1 #把數字識别為數字而不是字元排序。

sort -M #-M識别三個字元的月份。

#4.3.2 搜尋資料

grep three file1 #搜尋three 在file1檔案裡。

grep -v three file1 #搜尋three 在file1檔案裡,-v是反向搜尋。

grep -n three file1 #搜尋three 在file1檔案裡,-n顯示比對模式所在的行。

grep -c three file1 #搜尋three 在file1檔案裡,-c幾行比對到。

grep -e three -e two file1 #搜尋three 在file1檔案裡,-e是多個比對模式。

egrep #支援正規表達式,POSIX擴充,

fgrep

#4.3.3 壓縮資料

#gzip是 GNU的産物,以下為使用方法:處理.gz檔案。

gzip #用來壓縮檔案。

gzcat #用來檢視壓縮檔案的内容。

guncat #來解壓壓縮檔案。

gzip my* #表示把my開頭的檔案都壓縮了

tar -cvf test.tar /test/test1 #建立test.tar 包歸檔/test/test1檔案

tar -tf test.tar #列出tar的内容

tar -xvf test.tar #提取内容.

#第五章 了解shell

#5.1 shell的類型

passwd /etc/passwd #檢視預設的shell類型。

/bin/bash # 直接啟動bash shell

exit #退出bash shell

#5.2 shell的父子關系

bash #在父shell建子shell

bash #在子shell建子shell

bash #在子shell建子shell

ps --forest #展示父子shell的結構。

#5.2.1 程序清單

pwd ;ls; cd /etc ;pwd ;cd;pwd;ls #在一行寫好多的指令依次執行。

(pwd ;ls; cd /etc ;pwd ;cd;pwd;ls) #在一行寫好多的指令依次執行,加()表示成程序清單,會建立對應的子shell

{pwd ;ls; cd /etc ;pwd ;cd;pwd;ls;} #在一行寫好多的指令依次執行,加{}表示成程序清單,不會建立對應的子shell

pwd ;ls; cd /etc ;pwd ;cd;pwd;ls; echo $BATH_SUBSHELL #在一行寫好多的指令依次執行,echo $BATH_SUBSHELL參數檢視是否是子shell,傳回0表示未建立子shell ,否則建立。

#子shell并非多程序的處理,因為終端控制着shell的i/o

#5.2.2 别出心裁的shell用法

#1.探索背景模式

sleep #背景模式 sleep 10 ,睡眠10秒

sleep 10000& # &符号表示背景模式

jobs #是顯示目前運作在背景模式中的所有使用者的程序(作業)

jobs -l #-l選項還能顯示指令的父id

#2.将程序清單置入背景

(sleep 2 ; echo $BASH_SUBSHELL ;sleep 2) #子shell ,傳回停止2秒

(sleep 2 ; echo $BASH_SUBSHELL ;sleep 2)& #子shell ,傳回停止2秒,并置于背景。

#3.協程

#協程可以同時做倆件事。它在背景生成一個子shell。

coproc sleep 20 #使用協程的用coproc指令。

coproc my_copoc { sleep 20; } #使用協程的用coproc指令,給協程起名字 my_coproc ,{}之間有空格;

coproc my_copoc { sleep 20; sleep 10} #使用協程的用coproc指令,給協程起名字 my_coproc ,{}之間有空格,倆個sleep 是把協程和程序放到一起,産生嵌套shell。

#5.3 了解shell的内建指令

#5.3.1 外不指令

#外部指令是檔案系統指令

which ps #找到ps的位置

type -a ps #找到ps的位置

ls -l /bin/ps #找到ps的具體資訊。

#5.3.2 内建指令

#内建指令不需要像外部指令一樣需要shell執行,和shell編譯為一體。

type cd #内建

type exit #内建

type -a echo #type -a 顯示外部和内部倆種。

which echo #which隻顯示外部指令檔案

#1.使用history指令

history #喚回使用的曆史指令

cat .bash_hirstory

histroy -a #-a

!20 #表示取出第20條history指令顯示的指令曆史集的。

#2.命名别名

alias -p #alias是别名

#第六章 使用Linux的環境變量

#bash shell 中存在倆種環境變量: 全局變量和局部變量

#6.1.1 全局環境變量

evn #檢視全局變量

printevn #檢視全局變量

printevn home #檢視個别環境變量的值用printevn,而不用evn

echo $home #顯示home的環境變量

#6.1.2局部環境變量

set #顯示某個環境變量的清單,局部和使用者環境變量。

#6.2 設定使用者定義變量

#6.2.1 設定局部使用者定義變量

echo $my_path #局部使用者變量

my_path=1 #設定局部使用者變量值,局部變量是小寫 ,變量名,等号,值之間沒有空格。

echo $my_path #顯示結果

my_path=‘hello world’

bash #建立shell

echo $my_path

exit #退出建立的shell

echo $my_path #上面定義的shell前的變量值,退出shell後任然可以使用。

my_path=‘hello world’

bash #建立shell

echo $my_path1=‘hello word hello word’

exit #退出建立的shell

echo KaTeX parse error: Expected 'EOF', got '#' at position 9: my_path #̲上面定義的shell前的變量值…my_path任然可以使用。

echo KaTeX parse error: Expected 'EOF', got '#' at position 10: my_path1 #̲上面定義的shell前的變量值…my_path1任然不可以使用。

#6.2.2 設定全局環境變量

#建立全局的環境變量是,先建立局部的環境變量,然後再導入到全局變量中

my_path2=‘wo shi zhao huajie’ #定義局部變量。

export my_path2 #變量前不需要加$号,修改子shell的全局變量不會影響父shell的值。

echo $my_path2

#6.3 删除環境變量

unset my_path #删除變量,在子程序删除全局變量,隻對子程序有用,父程序還是沒變。

#6.4 預設的shell 環境變量

#6.5 設定path環境變量

echo $PATH #顯示shell 查找的指令或者程式

myprog

#6.6定位系統環境變量

#6.6.1 登入shell

#登入shell讀取的五個檔案

/etc/profile #為主啟動檔案,系統每個使用者登入時都會執行這個啟動檔案,下面四個是針對使用者的,可根據需求定制。

$HOME/.bash_profile

$HOME/.bashrc

$HOME/.bash_login

$HOME/.profile

#1./etc/profile檔案

#6.6.2 互動式shell程序

#不是啟動系統時候啟動的shell 叫互動式shell,它就不會通路/etc/profile檔案,隻會檢查使用者目錄中的.bashrc檔案。

#.bashrc檔案的倆個作用,一是檢視/etc目錄下通用的bashrc檔案,二是為使用者提供一個制自的已命名和私有的函數腳本。

#6.6.3 非互動式的shell

#6.6.4 環境變量持久化

#6.7 資料變量

mytest=(one two three four five)

echo $mytest #隻會顯示數組變量的第一個值。

echo ${mytest[2]} #顯示數組中的第三個元素。

echo ${mytest[]} #通配符顯示所有的元素。

mytest[2]=seven #改變第三個元素的值。

echo ${mytest[]} #顯示所有的元素。

unset mytest[2] #删除第三個元素的值。

unset mytest #删除整個數組。

#第七章 Linux檔案權限

#7.1.1 /etc/passwd檔案

cat /etc/passwd #标準的文本檔案

#7.1.2 /etc/shadow檔案

cat /etc/passwd #檔案對linux系統密碼管理提供了更多的控制。

#7.1.3 添加新使用者

/usr/sbin/useradd -D #被設定在/usr/default/useradd 檔案中,-D是檢視預設設定。

useradd -m test #建立test,-m是建立home目錄,并将/etc/skel目錄中的檔案複制過來。

useradd -D -s /bin/tsch #新增使用者,-s 更改某些參數到/bin/tsch

#7.1.4 删除使用者

/user/sbin/userdel -r test #删除使用者test,-r參數之前的/home/test目錄就不存在了

#7.1.5 修改使用者

#1.usermod

-c #修改備字段

-e #修改過期日期

-g #修改預設的登入組

-l #修改使用者賬戶的登入名字

-L #鎖定賬戶,使使用者無法登入

-p #修改賬戶的密碼

-U #解除鎖定,使使用者能夠登入

-L #賬戶鎖定,使使用者無法登入,同時無需删除賬戶和使用者資料,要讓賬戶恢複正常,隻需要-U選項就可以了。

#2.passwd和chpasswd

passwd #修改密碼

#3.chsh,chfn和chage 修改特定的賬戶資訊。

#7.2 使用Linux組

#7.2.1 /etc/group檔案

#7.2.2 建立新組

groupadd #可以建立新組

#7.2.3修改組

#7.3 了解檔案權限

#7.3.1 使用檔案權限符号

#7.3.2 預設檔案權限

ls -l #顯示檔案和目錄

#目錄的具體資訊含義:

#第一個字段

  • #代表檔案

    d #代表目錄

    l #代表連結

    c #代表字元型裝置

    b #代表塊裝置

    n #代表網絡裝置

#之後三組三字元的編碼,

r #代表對象是可讀的

w #代表對象是可寫的

x #代表對象是可執行的

#7.4 改變安全性設定

#7.4.1 改變權限

chmod #改變檔案和目錄的安全設定。

chmod opthions mode file #mode參數可以使用八進制模式或者符号模式進行安全性設定,八進制模式設定非常直覺,直接用期望賦予檔案的标準3位八進制權限碼即可。

chmod 760 newfile #八進制會自動應用到指定的檔案上。

#符号模式下指定的權限格式

[ugoa] [±=] [rwxXstugo…]

#第一組定義了權限作用的對象:

u #代表使用者

g #代表組

o #代表其他

a #代表上訴所有

#下一步 後面跟着的符号,

  • #表示想在現在權限基礎上增權重限
  • #表示想在現有權限基礎上移除權限

    = #将權限設定成後面的值

    #最後,第三個符号代表 作用到設定上的權限。除了rwx外還有下面的

    X #如果對象是目錄或者它已經有執行權限,賦予執行權限。。

    s #運作時重新設定UID和GID

    t #保留檔案和目錄

    u #設定屬性主權限

    g #設定屬組權限

    o #設定其他使用者權限

chmod o+r newfile #o+r 是設定讀取權限

chmod u-r newfile #u-r 是移除屬主的讀取權限

#7.4.2 改變所屬關系

chown #指令是改變檔案的屬主

chgrp #改變檔案的屬組

#格式:

chown option ower[.group] file #可以用登入名字或者UID來确定檔案的新屬主

chown dan newfile # 改變屬主為dan

chown dan.shared newfile #改變屬主和屬組

chown .rich newfile #改變單個檔案的屬組

chown test. newfile #如果登入名和屬組一樣,可以這樣寫。

chgrp shared newfile #改變屬組

#7.5共享檔案

------------------------------------------中間缺少的章節後期學習----------------------------------------------------------------------------------

#第八章 管理檔案系統

#8.1.1 基本的Linux的檔案系統

#1.ext檔案系統 ext稱為擴充檔案系統,不得超過2GB

#2.ext2檔案系統 最大是2TB

#8.1.2 日志檔案系統

#1.ext3檔案系統

#2.ext4檔案系統

#3.Reiser檔案系統

#4.JFS檔案系統

#5.XFS檔案系統

#8.1.3寫時複制檔案系統

#1.ZFS檔案系統

#2.Btrf檔案系統

#8.2 操作檔案系統

#8.2.1 建立分區

fdisk /dev/sdb #建立分區 使用fdisk指令。

#8.2.2 建立檔案系統

type mkfs.ext4

type mkfs.btrfs

------------------------------------------中間缺少的章節後期學習----------------------------------------------------------------------------------

#第十章 使用編譯器

#10.1 vim編譯器

#10.1.1 檢查vim軟體包

alias vi

alias vi=‘vim’

which vim

#10.1.2 vim編譯器

vim myprg.c

#vim編譯器的倆種模式

#普通模式

#插入模式 ----按i鍵進入插入模式,退出插入模式,到普通模式 用ESC鍵。

ctrl+F #下翻一螢幕

ctrl+B #上翻一螢幕

G #移到緩存區的第一行

num G #移動到緩存區中的第num行

gg #移動到緩沖區的第一行

#在指令模式下有幾個指令可以将緩沖區的資料儲存到檔案中并退出vim

q #如果未修改緩存區資料,退出。

q1 #取消所有對緩沖區資料的修改并退出。

w filename #将檔案儲存到另一個檔案中。

wq #将緩沖區資料儲存到檔案中并退出。

#10.1.3 編輯資料

#vim編輯指令

x #删除目前光标所在位置的字元

dd #删除目前光标所在的行。

dw #删除目前光标所在位置的單詞

d$ #删除目前光标所在位置至末尾的内容。

J #删除目前光标所在行行尾的換行符

u #撤銷前一編輯指令

a #在目前光标後追加資料。

A #在目前光标所在行行尾追加資料。

r char #用char替換目前光标所在位置的單個字元。

R text #用text覆寫目前光标所在位置的資料,直接按下ESC鍵。

#10.1.4 複制和粘貼

y #複制指令。

yw #複制一個單詞。

y$ #表示複制到行尾。

p #粘貼資料

10.1.5 查找和替換

/ #按/符号輸入對應的查找檔案。

#替換指令:

:s/old/new/g #一行指令替換所有old

:n,ms/old/new/g #替換n和m之間的old

:%s、old/new/g #替換真個檔案中的所有old

:%s/old/new/g #替換整個檔案中的old,但是每次出現提示。

#10.2 nano 編輯器

nano zhj檔案 #使用nano做編譯器編譯檔案之類的,有提示符号。

#10.3 emacs 編譯器

#10.3.1檢查emacs 軟體包

which emacs #檢視emacs編譯器,是一款視圖畫的軟體。

yum list emacs #檢視是否有一個包。

yum install emacs #安裝emacs檔案。

#10.3.2 在控制台中使用emacs

#1.emacs 基礎

#2.編輯資料

#3.複制和粘貼

#4.查找和替換

#5.在emacs中使用緩沖區

#6.在控制台模式的emacs中使用視窗

#10.3.3 在GUI環境中使用emacs

#10.4 KDE系編譯器

#10.4.1 Kwriter 編譯器

#10.4.2 Kate 編譯器

#10.5 GNOME 編譯器

#10.5.1 啟動gedit

gedit zhj #編譯器zhj檔案。

#10.5.2 基本的gedit功能

#10.5.3 設定偏好設定

#1.設定view偏好

#第二部分 shell 腳本程式設計基礎

#第十一章 建構基本腳本

#使用多個指令

#建立腳本檔案

#顯示消息

#使用變量

#輸入輸出重新定向

#管道

#數學運算

#退出腳本

#11.1 使用多個指令

date ; who

#11.2建立shell 腳本檔案

#!/bin/bash #腳本指定第一行是什麼類型的腳本 #!開頭,/bin/bash 為要執行的腳本的類型路徑。

這是做什麼的腳本 #這句是描述腳本的用意。

date #顯示日期指令。

who #顯示現在使用者。

echo ‘zhe shi yi ge jiao ben test’ #輸出一段結果

$echo $PATH #檢視環境變量的指令

#要讓shell 找見對應建立的腳本,需要以下的方法:

#将shell腳本檔案所處的目錄添加到PATH環境變量中;

#在提示符中用絕對或者相對的檔案路徑來引用shell腳本檔案;

./test1 #使用絕對或者相對路徑執行shell

chmod u+x test1 #給檔案賦予權限

#11.3 顯示資訊

echo ‘xian shi xinxi’

echo -n ‘xian shi xinxi’ #換行-n

#11.4 使用變量

#11.4.1 環境變量

set #環境變量

cat test #顯示檔案

U I D 、 UID、 UID、USER 、$HOME #用來顯示已經登入使用者的有關資訊。

#11.4.2 使用者變量

#11.4.3 指令替換

#!/bin/bash #腳本指定第一行是什麼類型的腳本 #!開頭,/bin/bash 為要執行的腳本的類型路徑。

這是做什麼的腳本 #這句是描述腳本的用意。

date #顯示日期指令。

who #顯示現在使用者。

testing=

date

testing1= ( d a t e ) t o d a y = (date) today= (date)today=(date +%y%m%d)#格式化日期賦給變量

echo ‘zhe shi yi ge jiao ben test’ #輸出一段結果

date +%y%m%d #格式化日期,注意date後的空格。

ls /usr/bin -al >log.$today #輸出結果到這個目錄

#11.5 重定向輸入和輸出

#11.5.1 輸出定向

date >test1 #把date顯示内容定向儲存在test1 ,test1存在覆寫,不存在建立。

date >> test2 #把資料追加到test2 上,不存在test2建立,存在追加資料。

#11.5.2 輸入重定向

wc < test1 #wc是對檔案的行數,文本的詞數,文本的位元組數。<符号是輸入重定向, test1 的檔案内容。

wc << EOF

zhj

EOF #<<是内聯輸入重定向

#11.6 管道

rpm -qa >rpm.list ;sort <rpm.list #rpm 指令通過Red Hat 包管理系統(RPM)對系統上安裝包進行管理,-qa它會生成安裝包的清單,但是清單不會遵循某種特定的順序,sort 對清單對rpm.list排序。

command1 | command2 #将一個指令重新定向到另一個指令中。|符号很重要。

rpm -qa |sort #rpm的輸出 sort 直接進行處理,輸入和輸出進行處理。

rpm -qa |sort|more #三個指令一起用。

#11.7執行數學運算你

#11.7.1 expr指令

expr 1 + 8 #使用此指令對數字進行計算,注意1和8 之間的空格。

expr 1 * 8 #使用此指令對數字進行計算,注意1和8 之間的空格。

expr 1 % 8 #使用此指令對數字進行計算,注意1和8 之間的空格。

expr 1 / 8 #使用此指令對數字進行計算,注意1和8 之間的空格。

expr a | b #使用此指令對數字進行計算,注意1和8 之間的空格,如果a既不是null也不是0值,傳回0,否則傳回b。

expr a & b #使用此指令對數字進行計算,注意a和b 之間的空格,如果沒有參數是null或0值,傳回a,否則傳回0。

expr a < b #使用此指令對數字進行計算,注意1和8 之間的空格,如果a小于b,則傳回1,否則傳回0。

expr a <= b #使用此指令對數字進行計算,注意1和8 之間的空格,如果a<=b,則傳回1,否則傳回0。

expr a != b #使用此指令對數字進行計算,注意1和8 之間的空格,如果a!=b,則傳回1,否則傳回0。

expr a % b #使用此指令對數字進行計算,注意1和8 之間的空格,傳回餘數。

expr a : b #如果b比對到了a的某個模式,傳回該模式比對。

expr match a b #使用此指令對數字進行計算,注意1和8 之間的空格,如果b比對到了a的某個模式,傳回該模式比對。

expr substr string POS length #傳回起始位置為POS(從1開始計算),長度為length個字元的子字元串。

expr index string chars #傳回在string中找到chars字元串的位置,否則傳回0。

expr length string #傳回字元串的長度。

expr + TOKEN #将TOKEN解釋成字元串即使是個關鍵字。

expr (EXPRESSION) #傳回EXPRESSION。

#11.7.2 使用方括号

var1=KaTeX parse error: Expected 'EOF', got '#' at position 9: [1 + 5] #̲在bash中,在将一個數學運算…var1 / $var3]

chmod u+x test8 #賦權限給檔案。

#11.7.3浮點解決方案

#1.bc 的基本用法

#bash電腦能夠識别:數字,變量,注釋,表達式,程式設計語句,函數。

quit #可以退出電腦。

#2.在腳本中使bc

varq=KaTeX parse error: Expected 'EOF', got '#' at position 39: …wei shm' | bc) #̲bc計算機 var3=(echo “scale =4;44/5” | bc)

var4= ( e c h o " s c a l e = 4 ; (echo "scale =4; (echo"scale=4;varr/ v a r t " ∣ b c ) v a r e = vart" | bc) vare= vart"∣bc)vare=(bc << EOF

xian

zai

shi

zuo

shm

EOF

)

vare= ( b c < < E O F s c a l e = 4 a l = ( (bc << EOF scale=4 al=( (bc<<EOFscale=4al=(var1* v a r 2 ) b 1 = ( var2) b1=( var2)b1=(var3*$var5)

a1+b1

EOF

)

#11.8 退出腳本

#11.8.1 檢視退出狀态碼

date

echo $? #檢視退出碼狀态。退出是0。

#11.8.2 exit指令

var3=var1+var2

exit var3 #退出狀變量。

$? #檢視退出狀态碼。

#預設情況下,shell 腳本會以腳本中的最後一個指令的退出狀态碼退出。

./test8

#你可以改變預設的狀态行為,傳回自己的退出狀态碼,exit指令允許在腳本結束時指定一個退出狀态碼。

#!/bin/bash

exit 5

#當檢視腳本退出碼,你得到作為參數傳給exit指令的值。

#!/bin/bash

exit $var

#也可使用變量。

#第十二章 使用結構化指令

#12.1 使用if-then 語句

if pwd

then

echo ‘這是一個if -then-fi’

fi

#12.2 if-then-else 語句

if

then

echo ‘1132212413’

else

echo ‘aafafafafa’

fi

#12.3 嵌套if

if pwd

then

echo ‘zheshi if’

elif who # 隻是elif的寫法

then

echo ‘zheshi who’

else

echo ‘zheshi else’

fi

#12.4 test指令

test xxx #這是test指令,test列出的成立,test 指令就會退出并傳回狀态碼0,這樣if-then語句就可以正常執行了,否則if-then 語句不執行。

if test xxx

then

echo ‘zhe shi test’

elif

echo ‘adasda’

elif

echo ‘adaa’

else

echo ‘2312312’

fi

#12.4.1 數值比較

test a -eq b #檢查a和b是否相等。

test a -ge b #檢查a是否大于或者等于b。

test a -gt b #檢查a是否大于b。

test a -le b #檢查a否小于或者等于b。

test a -lt b #檢查aa否小于b。

test a -ne b #檢查a是否不等于b。

if [ 1 = 2 ] #bash shell 提供了另外一條測試方法,無需再if-then中聲明test指令,方括号定義 測試條件,注意第一個方括号之後和第二個方括号前必須加上一個空格。否則會報錯

then

echo ‘zfdf’

else

echo ‘adsdaasdas’

#test 指令可以判斷比較三類條件:數字比較,字元比較,檔案比較。

#12.4.2 字元串比較

#1.字元串相等

#2.字元串順序

if [ $var1 > $var2 ] #大于号小于号必須轉義,否則會被當做重新定向符号。

then

echo ‘zheshi 轉義字元’

#sort 和test處理大寫字母的方法正好相反。

#sort 認為大寫字母大于小寫字母。test認為大寫字母小于小寫字母。

#3.字元串大小

#-n和-z可以檢測一個變量是否含有資料。

if [ -n $var1 ] #檢測變量是否含有資料,判斷val1變量是否長度非0,而他的長度正好非0,是以then部分被執行了。

if [ -z $var2 ] #判斷var2的變量長度是否為0,為0,then執行。

if [ -z $var3 ] #判斷var3的長度是否為0。 $var3變量在shell腳本中未被定義過,是以字元串長度任然為0,盡管他未被定義過。

#12.4.3 檔案比較

test -d file1 #檢查file1是否存在并是一個目錄。

test -e file1 #檢查file1是否存在。

test -f file1 #檢查file1是否存在并是一個檔案。

test -r file1 #檢查file1是否存在并可讀。

test -s file1 #檢查file1是否存在并非空。

test -w file1 #檢查file1是否存在并可寫。

test -x file1 #檢查file1是否存在并可執行。

test -O file1 #檢查file1是否存在并屬目前使用者所有。

test -G file1 #檢查file1是否存在并預設組和目前使用者相同。

test file1 -nt file2 #檢查file1是否比file2新。

test file1 -ot file2 #檢查file1是否比file2舊。

if [ -d zhj ] #上面的使用方法如此

#12.5 符合條件

if [ -f file1 ] || [ -d file2 ] && [ file1 -nt file2 ] #符合使用方法;

#12.6 if-then的進階特性

#12.6.1 使用雙括号

#雙括号指令允許你在比較過程中使用進階數學表達式。

#if 語句中使用雙括号;

if (( $var 2 >90 )) #雙括号的執行個體

#雙括号可以使用的指令符号: var++ ,val–,++val,–val,!,-,,<<,>>,&,|,&&,||

#12.6.2 使用雙括号

if [[ $user==r* ]]

#12.7 case 指令

case $var in #case的第一步

v a r 1 ∣ var1| var1∣var2) echo ‘隻是第一個比對的資訊’;; #|符号分割倆個模式 )括号隻有半邊。

$var3) echo ‘這是第二個比對到的資訊’;;

*) echo ‘這是預設比對的資訊’;; #*通配符号會捕獲所有已知模式。

esac #case結束,寫成esac

繼續閱讀