復習二

復習二

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 22:26
下一篇 2016-07-16 22:26

相關推薦

  • Linux路由實驗

    一    實驗背景:路由器的功能是將不同網段的主機建立通信,本次試驗是在使用linux主機當作路由器,完成主機間通信。如下圖所示 二、實驗環境:主機A和B為CentOS7.2,主機C和D為CentOS6.8,且C和D上分別都有兩塊網卡 三、實驗步驟     注意:為避免干擾項,需將每臺主機…

    Linux干貨 2016-09-07
  • 馬哥教育網絡班20期+第6周課程練習

    1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; cp /etc/rc.d/rc.sysinit /tmp sed 's/^[[:space:]]/#&/' /tmp/rc.sysinit 2、…

    Linux干貨 2016-08-15
  • linux 7

    centos啟動流程: POST–>BootSquence(BIOS)–>Bootloader(MBR)–>kernel(ramdisk)–>rootfs(switch_root)–>/sbin/init(/etc/inittab,/etc/init/*.conf,/u…

    Linux筆記 2018-08-05
  • 自制linux和內核編譯

    自制linux和內核編譯 1、分區并創建文件系統 fdisk /dev/sdb分兩個必要的分區/dev/sdb1對應/boot /dev/sdb2對應根/mkfs.ext4 /dev/sdb1mkfs.ext4 /dev/sdb2 2、掛載boot mkdir/mnt/bootmount /dev/sdb1 /mnt/boot 3、安裝grub grub-i…

    Linux干貨 2016-09-23
  • 粗談用戶和用戶組相關配置文件

    創建一個用戶時,用戶會根據系統配置文件來創建用戶。配置文件在/etc/login.defs文件里 login.defs //創建賬戶自動分配參數 PASS_MAX_DAYS //可以使用密碼的最大天數。 PASS_MIN_DAYS //密碼更改之間允許的最短天數 PASS_MIN_LEN //最小可接受的密碼長度 PASS_WARN_AGE //密碼過期前發…

    Linux筆記 2018-04-08

評論列表(1條)

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

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

欧美性久久久久