復習二

復習二

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

(0)
wostopwostop
上一篇 2016-07-16
下一篇 2016-07-16

相關推薦

  • file 命令

    文件類型:             – 普通文件             d 目錄文件   &nb…

    2017-07-23
  • LAMP快速部署及LAMP組合深入講解-1

      lamp php php: 腳本編程語言、嵌入到html中的嵌入式web程序開發語言;基于zend編譯成opcode(二進制格式的字節碼,重復運行,可省略編譯環境) 一、PHP簡介 PHP是通用服務器端腳本編程語言,其主要用于web開發以實現動態web頁面,它也是最早實現將腳本嵌入HTML源碼文檔中的服務器端腳本語言之一。同時,php還提供了一…

    Linux干貨 2017-06-04
  • 第七周-磁盤管理、RAID及Shell腳本練習

    一、創建一個10G分區,并格式為ext4文件系統; (1)、 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl; (2)、掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; [root@N1 ~]# mkfs.ext4 -b 2048 -m 2 -L MYDATA /…

    Linux干貨 2017-08-13
  • AWK文本工具和軟件包管理

    AWK文本工具 兩種版本1.nawk ??2.gawk gawk ?? 模式掃描和處理語言 選項: -F 指明輸入時用到的字段分隔符 -v ?var=value:自定義變量 基本格式: awk [options] ’program’???file…. program:pattern{action statrments;………

    Linux干貨 2018-03-15
  • Linux學習筆記(第三篇)

    N21_Keen_第三周博客 1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 who | cut -d " " -f 1 | sort -u 2、取出最后登錄到當前系統的用戶的相關信息。 last…

    Linux干貨 2016-08-15
  • 文本查看類命令

    文本查看相關的命令:1. ?cat – 串連文件,并以標準輸出顯示語法:cat [OPTION]… [FILE]… 常用選項 選項 | 含義—— | ——-n | 在顯示文件內容時打印行號示例:~]# cat -n /etc/rc.d/init.d/functions顯示/e…

    2017-09-07

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-07-17 20:24

    寫的很好,排版也很漂亮,加油

欧美性久久久久