#周遊目錄
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