復習二
bash的配置文件:
按生效范圍劃分: 全部配置: /etc/profile /etc/profile.d/*.sh /etc/bashrc 個人配置: ~/.bash_profile ~/.bashrc 按功能劃分: 環境變量,運行命令和腳本: 全局:/etc/profile /etc/profile.d/*.sh 個人:~/.bashrc_profile 定義本地變量,命令別名: 全局:/etc/bashrc 個人:~/.bashrc shell登錄: 交互式登錄: 直接通過終端輸入帳號密碼登錄: 使用“su - UserName”或“su -l UserName”切換的用戶 /etc/profile-->/etc/profile.d*/.sh-->~/.bash_profile-->~/.bashrc--/etc/bashrc 非交互式登錄: su USERName 圖形界面下打開的終端 執行腳本 ~/.bashrc-->/etc/bashrc-->/etc/profile.d/*.sh 輯配置文件定義的新配置的生效方法: (1)重新啟動shell進程; (2)使用source或.命令進程
bash中的算術運算:
+ - * / %(取余數) 實現算術運算: 1,let var=算數運算表達式 [root@localhost ~]# name1=3 [root@localhost ~]# name2=4 [root@localhost ~]# let name3=$name1+$name2 [root@localhost ~]# echo $name3 7 2,(2)var=$[算術表達式] [root@localhost ~]# name4=$[$name1+$name2] [root@localhost ~]# echo $name4 7 3,(3)var=$(()) [root@localhost ~]# name5=$(($name1+$name2)) [root@localhost ~]# echo $name5 7 4,var=$(expr args1 arg2 arg3...) [root@localhost ~]# name6=$(expr $name1 + $name2) [root@localhost ~]# echo $name6 7 bash有內建的隨機數生成器;$RANDOM [root@localhost ~]# echo $[RANDOM%60] 17 [root@localhost ~]# echo $[RANDOM%60+1]取1到60之間 增強型賦值: [root@localhost ~]# name=10 [root@localhost ~]# [root@localhost ~]# let name+=1 [root@localhost ~]# echo $name 11 [root@localhost ~]# echo $name 11 [root@localhost ~]# let name+=1 [root@localhost ~]# echo $name 12 如果后面數字不是1。 [root@localhost ~]# let name+=2 [root@localhost ~]# echo $name 17
練習:
練習1,寫一個腳本 計算/etc/passwd文件中的第10個用戶和第20用戶的ID之和 #!/bin/bash userid1=$(head -n 10 /etc/passwd | tail -n 1 | cut -d: -f3) userid2=$(head -n 20 /etc/passwd | tail -n 1 | cut -d: -f3) useridsum=$[$userid1+$userid2] echo "uid sum: $useridsum" [root@localhost ~]# cat suansu.sh #!/bin/bash # user1=`head -n 10 /etc/passwd | tail -n 1 | cut -d':' -f3` user2=`head -n 20 /etc/passwd | tail -n 1 | cut -d':' -f3` # userzongsu=$[$user1 + $user2] # echo "zong shu :$userzongsu" [root@localhost ~]# chmod +x suansu.sh [root@localhost ~]# ./suansu.sh zong shu :509 練習2:寫一個腳本 傳遞2個文件路徑參數給腳本,計算這2個文件中所有空白行之和 #!/bin/bash spaceline1=$(grep "^[[:space:]]*$" $1 | wc -l) spaceline2=$(grep "^[[:space:]]*$" $2 | wc -l) echo "The sum of space line: $[$spaceline1+$spaceline2]" ?練習3:統計/etc, /var, /usr目錄共有多少個一級子目錄和文件; 變量取值的時候: var=$()和var=``沒有區別
條件測試:
判斷某需求是否滿足,需要由測試機制來實現; 專用的測試表達式需要由測試命令輔助完成測試過程; 測試命令: test EXPRESSION [ EXPRESSION ] :命令 [[ EXPRESSION ]]:關鍵字 note:前后必須要有空格 bash的測試類型: 數值測試 -gt:是否大于 -ge:是否大于等于 -eq:是否等于 -ne:是否不等于 -lt:是否小于 -le:是否小于等于 [root@localhost ~]# name1=3 [root@localhost ~]# name2=4 [root@localhost ~]# name3=3 [root@localhost ~]# test $name1 -gt $name2 [root@localhost ~]# echo $? 1 [root@localhost ~]# test $name1 -lt $name2 [root@localhost ~]# echo $? 0 字符串測試 ==/=:字符串等值測試 >:是否大于: <:是否小于: !=:是否不等于: =~:左側字符串是否能夠被右側的PATTERN所匹配到: Note:次表達式一般用于[[ ]]中 -z “STRING”:測試字符串是否為空,空則為真,不空則為假 -n “STRING”:測試字符串是否為空,空則為假,不空則為真 [root@localhost ~]# [[ "$name1" = "$name2" ]] [root@localhost ~]# echo $? 1 [root@localhost ~]# [[ "$name1" =~ ^o.* ]] [root@localhost ~]# echo $? 1 [root@localhost ~]# [[ "$name1" =~ ^a.* ]] [root@localhost ~]# echo $? 0 [root@localhost ~]# [[ -z "$name1" ]] [root@localhost ~]# echo $? 1 [root@localhost ~]# [[ -n "$name1" ]] [root@localhost ~]# echo $? 0 ?練習:寫一個腳本 接受一個文件路徑作為參數; 如果參數個數小于1,則提示用戶“至少應該給一個參數”,并立即退出; 如果參數個數不小于1,則顯示第一個參數所指向的文件中的空白行數; [ $# -lt 1 ] && echo "At least one argument." && exit 1 bash自定義退出狀態碼: exit [n]:自定義退出狀態碼 注意:腳本一旦遇到exit命令。腳本會立即終止,終止退出狀態取決于exit命令后面的數字: 注意:如果未給腳本指定退出狀態碼,整個腳本的退出狀態碼取決于腳本中執行的最后一條命令的狀態碼:
特殊變量:
$# 表示變量的個數,常用于循環 $@ 當前命令行所有參數。置于雙引號中,表示個別參數 $* 當前命令行所有參數。置于雙引號中,表示將命令行所有參數當初一個單獨參數 $-(連字號) 在引用數給予Shell的選項 $? 表示上一個命令退出的狀態 $$ 表示當前進程編號 $0 表示當前程序名稱 $! 表示最近一個后臺命令的進程編號 $HOME 表示當前用戶根目錄 $IFS 表示內部的字段分隔符 $LANG 當前locale默認名稱 $PATH 環境變量 $PPID 父進程編號 $PWD 當前工作目錄 測試表達式的類別: 數值比較 字符串測試 文件測試: 存在性測試 -a FILE -e FILE: 文件存在性測試,存在為真,否則為假; 存在性及類別測試 -b FILE:是否存在且為塊設備文件; -c FILE:是否存在且為字符設備文件; -d FILE:是否存在且為目錄文件; -f FILE:是否存在且為普通文件; -h FILE 或 -L FILE:存在且為符號鏈接文件; -p FILE:是否存在且為命名管道文件; -S FILE:是否存在且為套接字文件; 文件權限測試: -r FILE:是否存在且可讀 -w FILE: 是否存在且可寫 -x FILE: 是否存在且可執行 文件特殊權限測試: -g FILE:是否存在且擁有sgid權限; -u FILE:是否存在且擁有suid權限; -k FILE:是否存在且擁有sticky權限; 文件大小測試: -s FILE: 是否存且非空; 文件是否打開: -t fd: fd表示文件描述符是否已經打開且與某終端相關 -N FILE:文件自動上一次被讀取之后是否被修改過; -O FILE:當前有效用戶是否為文件屬主; -G FILE:當前有效用戶是否為文件屬組; 雙目測試: FILE1 -ef FILE2: FILE1與FILE2是否指向同一個設備上的相同inode FILE1 -nt FILE2: FILE1是否新于FILE2; FILE1 -ot FILE2: FILE1是否舊于FILE2; 組合測試條件: 邏輯運算: 第一種方式: COMMAND1 && COMMAND2 COMMAND1 || COMMAND2 ! COMMAND [ -e FILE ] && [ -r FILE ] 第二種方式: EXPRESSION1 -a EXPRESSION2 EXPRESSION1 -o EXPRESSION2 ! EXPRESSION 必須使用測試命令進行; # [ -z "$hostName" -o "$hostName"=="localhost.localdomain" ] && hostname www.magedu.com # [ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab
原創文章,作者:wostop,如若轉載,請注明出處:http://www.www58058.com/24208
寫的很好,排版也很漂亮,加油