read,locate ,find 的總結及相關聯系

read 變量名

read 變量名1 [變量名2] < 文件名
不支持管道
read 變量名1 [變量名2] <<< “值1 [值2] …”
使用read來把輸入值分配給一個或者多個shell變量
     -p 指定要顯示的提示     # read -p “please inout your passwd :” passwd1
     -s 靜默輸入,一般用于密碼  # read -sp “please inout your passwd:” passwd1 加echo可以換行
     -n  N指定輸入的字符長度N  # read -n 5 name  # read -n 5 -p “hello: ” name
     -d ‘字符’輸入結束符 # read -d . -p “hello: ” name(敲點結束.)
     -t N TIMEOUT為N秒 # read -t 3 -p “hello: ” name (過3秒后自動結束)

防止擴展
      反斜線\會使隨后的字符按原意解釋,也就是轉意
      $ echo your cost : \$5.00
      your cost :$5.00
加單引號防止擴展
      單引號’防止所有擴展
      雙引號“”也防止所有擴展,但是以下情況列外:
      $ `(反引號)\反斜杠 !這四個不可以用” ” 雙引號
       

交互式登錄(登錄shell)
使用終端通過用戶名密碼登錄、su – username
執行順序:/etc/profile –> /etc/profile.d/.sh –> ~/.bash_profile –> ~/.bashrc –> /etc/bashrc
非交互登錄 (非登錄shell)
su username 、圖形界面下打開終端、執行腳本、其他bash實例
執行順序: ~/.bashrc –> /etc/bashrc –> /etc/profile.d/
.sh 

locate  查詢系統上預建的文件索引數據庫 /var/lib/mlocate.db 
        依賴于事先構建的索引 
          索引的構建是在系統較為空閑時自動進行的(周期任務),管理員手動更新數據庫(updatedb)
索引構建過程需要遍歷整個根文件系統,及消耗資源
        工作特點:
                 查找速度快
                 模糊查找
                 非實時查找
                 搜索的是文件的全路徑,不僅僅是文件名
                 可能只是搜索用戶具備讀取和執行權限的目錄

        -i 不區分大小寫   # locate  -i f1 |grep app
-n X  只列舉前n個匹配項目  # locate  -i -n 1 f1 |grep app
updatedb 更新locate數據庫 /var/lib/mlocate/mlocate.db
-r 支持正則  使用regex來搜索以.conf 結尾的文件 (’.conf$’)
           # locate  -r ‘f1$’   # locate  -r ‘.sh$’

find   實時查找工具,通過遍歷指定路徑完成文件查找
       工作特點:
                查找速度稍慢
                精確查找
                實時查找
                可能只搜索用戶具備讀取和執行權限的目錄 

-maxdepth level 最大搜索深度 指定目錄為第一級 # find -maxdepth 12 -name f1
-minxdepth level  最小搜索深度 # find -mindepth 12 -name f1  # find -mindepth 12 -maxdepth 12 -name f1
-name 基于名稱的精確查找  
               “文件名稱” 支持文件通配符 glob 
            *, ?,[],[^ ]  # find -name f1  # find -name “f1”  # find -name “[ab]f
         # find -name “[a-z]f
”  # find -name “[a-z]f[0-9]”   # find -name “[a-z]f[[:digit:]]” 
        -iname 基于名稱忽略大小寫的精確查找查找  # find -iname f1
-inum 基于inode查找 # ls -li  # find -inum 78  # find -inum 78 ls
-samefile 基于相同inode號的查找(查找硬鏈接)
              # ln f1 f10  # ls -li f1 f10  # find -samefile f1

-links n 硬鏈接為n的文件  # find -links 2
-regex 支持正則 默認為(emacs標準)  # find -regex “..sh$”  # find -regex “.\/[0-9].”  不支持 [[:upper:]]
-regextype egrep -regex 支持egrep同標準的正則   # find -regextype egrep -regex “.
\/[[:upper:]].” 
-user 用戶名  基于文件owner的查找   #chown guanyu f1  #find  -user guanyu ls
-group 組名 基于文件group的查找     # chgrp liubei f1  #find  -group liubei ls 
-uid userid 基于文件uid的查找       #find -uid number -ls
-gid groupid 基于文件gid的查找      #find -gid number -ls
-nouser 查找沒有owner的文件         userdel -r username ls -l  #find -nouser -ls
  -nogroup 查找沒有group的文件        #find -nogroup -ls
-type 基于文件類型的查找
? f: 普通文件  #find -type f
? d: 目錄文件  #find -type d
? l: 符號鏈接文件 #find -type l
? s:套接字文件 
? b: 塊設備文件 
? c: 字符設備文件 
? p: 管道文件
      組合條件查找:
                與:-a             find -nouesr -a -nogroup
                或:-o             find -nouesr -o -nogroup
                非:-not, !        find ! -nouesr  或 find -not -nouesr 
      德.摩根定律:
               (非A) 或(非B)= 非(A且B)
               (非A)且(非B) = 非(A或B)
                如:
                !A -a !B = !(A -o B)
                !A -o !B = !(A -a B)              
       find / -name “
.txt ” 當前目錄下
       find /var -name “log” 指定/var目錄下
       find  -uesr joe -group joe 搜索被用戶joe以及組群joe所擁有的文件     

  查找/etc下,  除了/etc/sane.d目錄的其它所有.conf 后綴的文件   
find /etc -path ‘/etc/sane.d’ -a -prune -o -name “.conf” -path 指定目錄 -prune 刪除,排除
  find /etc ( -path ‘/etc/sane.d’ -o -path ‘/etc/fonts’ ) -a -prune -o -name “
.conf”

根據文件大小來查找
        -size [+|-]#UNIT    
      常用單位:k, M, G,c(byte)

UNIT:  (#-1, #]如:6k 表示(5k,6k] ( 大于       ] 小于 #find -size 20M 大于19 小于等于20

       -#UNIT:[0,#-1]如:-6k 表示[0,5k]   [ 大于等于   ] 小于等于 // #find -size  -20M 大于等于0小于等于19
+#UNIT:(#,∞)如:+6k 表示(6k,∞)   #find -size  -20M  大于20到無窮
 
dd if=/dev/zero of=small.img bs=1M count=10  創建一個10M的文件

dd if=/dev/zero of=middle.img bs=1k count=20 創建一個20M的文件

dd if=/dev/zero of=big.img bs=1k    count=30 創建一個30M的文件

dd if=/root/centos7.3.iso of=/dev/sr0 將iso刻入光盤
dd if=/dev/sr0 of=/root/cntos7.3.iso  將光驅導入iso文件

練習:
1.編寫腳本/bin/per.sh,判斷當前用戶對指定的參數文件,是否不可讀并且不可寫
[ ! -r $1 -a ! -w $1 ] && echo “can’t read and write”
[ ! ( -r $1 -o -w $1 ) ] && echo “can’t read and write”
        [ ! -r $1 -a ! -w $1 ] && echo 文件不可讀也不可寫 || echo 文件可讀也可寫

2.編寫腳本/root/bin/excute.sh ,判斷參數文件是否為sh后綴的普通文件,如果是,添加所有人可執行權限,否則提示用戶非腳本文件
filename=basename $1
([ -f $1 ] && [[ “$filename” =~ .*.sh$ ]]) && chmod u+x $1 ||echo “非用戶腳本文件”
unset filename

        ([[ $1 =~ “.sh”$ ]] && [ -f $1 ])  &&  chmod +x $1 || echo 非腳本文件

3.編寫腳本/root/bin/nologin.sh和login.sh,實現禁止和充許普通用戶登錄系統
nologin:[ “$1” ] && (id $1 &> /dev/null && passwd -l $1 > /dev/null && echo “用戶$1 禁用成功!” 
        || echo “用戶$1 不存在!”) \  
         || echo “請在命令后面輸入指定的用戶!”
        login:[ “$1” ] && (id $1 &> /dev/null && passwd -u $1 > /dev/null && echo “用戶$1 解鎖成功!” 
        || echo “用戶$1 不存在!”) \  
             ||  echo “請在命令后面輸入指定的用戶!”

        #!/bin/bash 
        usermod -s /bin/bash $1
        #!/bin/bash
        usermod -s /sbin/nologin $1

作業:
編寫一個腳本/root/bin/createuser.sh,腳本的執行語法必須是:createuser.sh -u username -m password,選項與參數間可支持多空格,但不能順序顛倒。 
當未指定正確的選項或參數時,以錯誤輸出方式提示“createuser.sh -u username -m password ”后退出腳本。
用戶名必須以字母開頭,可包括數字和_。否則不合法。以錯誤輸出提示用戶”用戶名僅包含字母數據和下劃線”
當用戶名檢測合法后,判斷用戶名是否已存在,若存在,再判斷用戶是否已設置過密碼,若設置過密碼,直接退出,未設置,則將密碼設置為所指定的密碼后以正確輸出方式顯示“username 密碼已更新后退出”
當用戶名不存在,則創建用戶,并為該用戶設置所指定的密碼后以正確輸出方式顯示“用戶username已創建并更新密碼”
要求腳本執行過程中不能有非要求的其他輸出結果出現。腳本在非正確方式退出時應反回給?參數非0值。

!/bin/bash

——————————————

Filename:

Author:whb

Email:

Website:

Description:

——————————————

[ $@ ] ||(echo 請輸入參數;exit 1) ||exit 1 &&echo $1

echo false

[ $1 = “-u” -a $3 = “-m” -a $# -eq 4 ] &>/dev/null ||(echo createuser.sh -u username -m password 1>&2 && exit 
1
                )&&(
        echo $2 |egrep “\<^[:alpha:]*$\>” &>/dev/null ||(echo 用戶名僅包含字母數>
據和下劃線 1>&2 ;exit 1
                        ) &&(
                id $2 &amp;&gt;/dev/null ||(useradd $2 ;echo $4 |passwd –stdin $2 &>/dev/null &&echo 用戶${2}已>
創建并更新密碼;exit 1 
                                ) &&(getent shadow $2 |egrep ‘\$'[[:digit:]]’\$’ &>/dev/null &&(echo 密碼已存>
在 1>&2 ;exit 0
                                                )||(
                                echo $4 |passwd –stdin $2 &>/dev/null &&echo 用戶${2}密碼已更新;exit 1
                                )||exit 1)||exit 1)||exit 1) ||exit 1

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@答案2

!/bin/bash

———————–

Filename:createuser13.sh

Revision:7.0

Date:2017-08-06

Description:create user

———————–

判斷用戶名是否規范,并且給出返回值

decide=(echo $2|grep "^[[:alpha:]]\([[:alpha:]]\|[[:digit:]]\|_\)*$" &amp;&gt;/dev/null;echo $?)

判斷用戶是否存在,并給出返回值

id=id $2 &amp;&gt;/dev/null;echo $?

截取用戶密碼位

mima=getent &nbsp;shadow $2 |cut -d: -f 2

判斷第一個參數

if [ “$1” != “-u” ];then
   echo “createuser.sh -u username -m password”
   exit 1
fi

判斷第三個參數 

if [ “$3” != “-m” ];then
   echo “createuser.sh -u username -m password”
   exit 1
fi

判斷參數個數

if [ $# -ne 4 ];then
   echo ” createuser.sh -u username -m password”
   exit 1
fi

判斷第二個參數

if  [ $decide -ne 0 ];then
    echo “用戶僅包含字母數字和下劃線”
    exit 1
else
    if [ $id -eq 0 ];then
       if [ “$mima” == “!!” -o “$mima” == “” ];then
           echo "$4" |passwd --stdin $2 &amp;&gt;/dev/null
            echo “$2密碼已更新”
            exit 1
        else
           exit 1
       fi
    else
        useradd $2
        echo $4 |passwd --stdin $2 &nbsp;&amp;&gt;/dev/null
         echo “用戶$2已創建并更新密碼” 
      
    fi 
fi
unset decide
unset id
unset mima
1、編寫腳本/root/bin/argsnumsh,接受一個文件路徑作為參數;如果參數個數小于1,則提示用戶“至少應該給一個參數”,并立即退出;如果參數個數不小于1,則顯示第一個參數所指向的文件中的空白行數

[   “$@”  ]&&(cat $1 |grep “^[[:space:]]$” |wc -l) ||(echo 至少應該給一個文件參數!;exit)

2、編寫腳本/root/bin/hostping.h,接受一個主機的IPv4地址做為參數,測試是否可連通。如果能ping通,則提示用戶“該IP地址可訪問”;如果不可ping通,則提示用戶“該IP地址不可訪問”

ping -c1 -w1 $1 &> /dev/null && echo “該IP地址可以訪問!”||echo”該IP地址不可訪問!”

3、編寫腳本/root/bin/checkdisk.sh,檢查磁盤分區空間和inode使用率,如果超過80%,就發廣播警告空間將滿
diskused_max=df | grep sd|sort -nr -k5|head -1|tr -s ' ' %|cut -d% -f5
inodeused_max=df -i| grep sd|sort -nr -k5|head -1|tr -s ' ' %|cut -d% -f5
[ “$diskused_max” -gt “80” ] && wall “空間即將滿”||echo “空間使用率不超過80%”
[ “$inodeused_max” -gt “80” ] && wall “inode即將滿”||echo “inode使用率不超過80%”他也
unset diskused_max inodeused_max 

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
dev=df|grep "/dev/sd"|egrep -o "[0-9]{1,3}%"|sort -n|tail -n 1|cut -d% -f1
ino=df -i|egrep -o "[0-9]{1,3}%" |sort -n|tail -n 1|cut -d% -f1
[[ “$dev” -gt 80 ]] || [[ “$ino” -gt 80 ]] && echo $(wall 磁盤已滿)||echo 還有很多利用空
間呦
unset dev

作業:

1、讓所有用戶的PATH環境變量的值多出一個路徑,例如:/usr/local/apache/bin
  export PATH=$PATH:/app/bin? 
2、用戶root登錄時,將命令指示符變成紅色,并自動啟用如下別名:
rm=‘rm –i’cdnet=‘cd /etc/sysconfig/network-scripts/’
editnet=‘vim /etc/sysconfig/network-scripts/ifcfg-eth0’  (centos6.9)
editnet=‘vim /etc/sysconfig/network-scripts/ifcfg-ens33 ’ (CentOS7)? 
3、任意用戶登錄系統時,顯示紅色字體的警示提醒信息“Hi,dangerous!”?
/etc/bashrc中或/etc/profile.d/
.sh echo -e ‘\033[31mHi,dangerous!\033[0m’ 3字體色 1紅色
4、編寫用戶的環境初始化腳本reset.sh,包括別名,登錄提示符,vim的設置,環境變量等

!/bin/bash

——————————————

Filename:reset45.sh 

Revision: 1.0

Date: 20170807

Author: glx

Email:

Website:

Description:用戶環境的初始化 

——————————————

“***********************腳本內容如下*********************”

別名的設置

echo ‘
alias rm=’rm -i’
alias vi=’vim’
alias cp=’cp -i’
alias l.=’ls -d .* –color=auto’
alias ll=’ls -l –color=auto’
alias ls=’ls –color=auto’
alias mv=’mv -i’
PS1=”[\033[01;32m]\u@\W\$[\033[00m] ” ‘ >> ~/.bashrc

登錄提示符

echo ‘PS1=”[\033[01;32m]\u@\W\$[\033[00m] “‘ >> ~/.bashrc

環境變量的設置

echo ‘
export GOROOT=/usr/local/go
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN
export GOPATH=/mnt/wwwroot/gofile ‘ >> ~/.bash_profile

. ~/.bashrc
. ~/.bash_profile

5、編寫一個創建用戶的腳本createyonghu.sh,執行該腳本不用輸入任何參數,執行時會提示用戶輸入用戶名,之后檢測用戶名是否存在,若存在直接提示用戶已存在并退出,若不存在,再次提示用戶輸入密碼,要求密碼至少5個字符以上,僅可包含大小寫及數字組成。 密碼的輸入過程不可見,且要求用戶輸入兩次密碼,兩次不一致,直接退出。兩次一致,則創建用戶并將密碼設置為指定密碼后,提示用戶及密碼設置成功。

!/bin/bash

——————————————

Filename: createyonghu.sh   

Date:    2017-08-07 

Revision: 1.0

Author: 李甜甜

stdentID:16    

——————————————

read -p “請輸入要新建的用戶名:” username
if id $username &>/dev/null ; then 
        echo “用戶已存在”;exit 1
else
        read -sp “請輸入密碼:”  passwd1 ; echo

        if [[ “$passwd1” =~  ^[[:alnum:]]{5,}$   ]] ; then 
                read -sp “請再次輸入密碼確認:” passwd2 ;echo

                if [ “$passwd1” == “$passwd2” ] ;then
                        useradd $username ; echo $passwd2 | passwd –stdin  $username &>/dev/null ;echo “用戶及密碼設置成功”
                else
                        echo “兩次密碼不一致”  ;exit 1 
                fi

        else
                echo “密碼至少5個字符以上,僅可包含大小寫字母及數字” 
                exit 2
        fi

fi

刪除變量

unset username  passwd1 passwd2

原創文章,作者:MOMO,如若轉載,請注明出處:http://www.www58058.com/84543

(0)
MOMOMOMO
上一篇 2017-08-12
下一篇 2017-08-12

相關推薦

  • 8-10 bash變量淺談

    8-10 作業 一、腳本 1、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小。 2、編寫腳本/root/bin/backup.sh,可實現每日將/etc/目錄備份到/root/etcYYYY-mm-dd中 3、編寫腳本/root/bin/disk.…

    Linux干貨 2016-08-15
  • Linux發行版本介紹與哲學思想

    1.Linux發行版本介紹 Linux 發行版(英語:Linux distribution,也被叫做GNU/Linux 發行版),為一般用戶預先集成好的Linux操作系統及各種應用軟件。一般用戶不需要重新編譯,在直接安裝之后,只需要小幅度更改設置就可以使用,通常以軟件包管理系統來進行應用軟件的管理。 1.服務器版本:Centos/Debian 從Red Ha…

    Linux干貨 2016-10-28
  • 初涉Linux基本要點概括(1)續

       6. Linux發行版都基本遵循文件系統層級標準(Filesystem Hierarchy Standard)。                 續   …

    Linux干貨 2016-10-13
  • rsync+inotify實時同步備份數據

    rsync同步 rsync+inotify實時同步備份數據 軟件簡介: rsync命令簡介: rsync命令是一個遠程數據同步工具,可通過LAN/WAN快速同步多臺主機間的文件。rsync使用所謂的“rsync算法”來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快。 rsync是一個功能非常強大…

    Linux干貨 2016-10-28
  • 從新開始,堅持記錄

    從新開始,從心開始,記錄自己的學習,不逼自己一把,永遠不知道自己的潛力。

    Linux干貨 2016-12-05
  • Linux系統管理常用命令

    系統管理工具 進程的分類: CPU-Bound:CPU密集型,非交互。特別消耗CPU的,加密解密,壓縮解壓 IO-Bound:IO密集型,交互。大量的硬盤讀寫,例如復制文件 Linux系統狀態的查看及管理工具:pstree, ps, pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill, pki…

    Linux干貨 2017-12-18
欧美性久久久久