linux系統學習第十一天-<<工程師技術>>

兩臺虛擬機,均要檢測

1. Yum是否可用
2.  防火牆默認區域修改爲trusted
3. IP地址是否配置

#######################################################

 

二、普通用戶(必須還原環境)
 
     客戶端普通用戶訪問服務端nfs-server服務,
     服務端會以客戶端相同UID身份的本地用戶進行權限判定

    LDAP :  網絡用戶,提供用戶名
    kerberos : 密碼驗證,實現“一次密碼認證,多次免密登錄”的通行證機制


1.兩臺虛擬機都運行腳本,加入LDAP與kerberos
 
  # lab nfskrb5 setup

2.服務端修改配置文件,創建讀寫的共享
[root@server0 ~]# mkdir /test
[root@server0 ~]# vim /etc/exports

   /test  *(rw,sec=krb5p)

3.服務端部署加密的密鑰
# wget http://172.25.254.254/pub/keytabs/server0.keytab  -O /etc/krb5.keytab

# ls  /etc/krb5.keytab

4.服務端 重起 nfs-server 與 nfs-secure-server

# systemctl restart  nfs-server  nfs-secure-server

5.服務端保證ldapuser0用戶有寫權限,設置本地權限
[root@server0 ~]# setfacl -m u:ldapuser0:rwx /test
[root@server0 ~]# getfacl /test

6.客戶端訪問與掛載共享
[root@desktop0 ~]# showmount -e 172.25.0.11
[root@desktop0 ~]# mkdir /mnt/nfs
[root@desktop0 ~]# vim /etc/fstab

 172.25.0.11:/test  /mnt/nfs  nfs  _netdev,sec=krb5p  0  0

7.客戶端部署密鑰文件,重起相關的服務
# wget http://172.25.254.254/pub/keytabs/desktop0.keytab  -O /etc/krb5.keytab

# systemctl restart nfs nfs-secure

8.客戶端驗證掛載,寫入(必須採用ssh方式,su不經過kerberos驗證)
[root@desktop0 ~]# mount -a
[root@desktop0 ~]# df -h

[root@desktop0 ~]# ssh  [email protected]

[ldapuser0@desktop0 ~]$ cd /mnt/nfs/
[ldapuser0@desktop0 nfs]$ touch 1.txt
[ldapuser0@desktop0 nfs]$ ls
1.txt
[ldapuser0@desktop0 nfs]$ exit

########################################################
 Shell腳本

     腳本:可以執行文件,運行後可以實現某種功能(命令的堆積,非交互)


規範Shell腳本的一般組成
• #! 環境聲明(Sha-Bang)
• # 註釋文本
• 可執行代碼

 

一、書寫第一腳本程序
[root@server0 ~]# vim /root/1.sh

 #!/bin/bash
 echo hello world
 hostname
 cat  /etc/redhat-release
 ifconfig | head -2  | tail -1

[root@server0 ~]# /root/1.sh

二、書寫爲Server0自動搭建Yum的腳本
[root@server0 ~]# vim /root/yum.sh
 #!/bin/bash
 rm -rf /etc/yum.repos.d/*
 echo '[dvd]
 name=dvd
 baseurl=http://172.25.254.254/content/rhel7.0/x86_64/dvd/
 enabled=1
 gpgcheck=0'  > /etc/yum.repos.d/haha.repo
 yum clean all
 yum repolist

[root@server0 ~]# chmod +x /root/yum.sh
[root@server0 ~]# /root/yum.sh
管道傳遞
• 使用 | 管道操作
– 將前一條命令的標準輸出交給後一條命令處理


三、重定向輸出

    >:只收集前面命令的正確輸出
    2>:只收集前面命令的錯誤輸出
    &>:收集前面命令的錯誤與正確輸出

[root@server0 ~]# echo 123 > /opt/1.txt
[root@server0 ~]# cat /opt/1.txt

[root@server0 ~]# cat /opt/1.txt /etc/
[root@server0 ~]# cat /opt/1.txt /etc/ > /opt/a.txt
[root@server0 ~]# cat /opt/a.txt

[root@server0 ~]# cat /opt/1.txt /etc/ 2> /opt/a.txt
[root@server0 ~]# cat /opt/a.txt

[root@server0 ~]# cat /opt/1.txt /etc/ &> /opt/a.txt
[root@server0 ~]# cat /opt/a.txt

######################################################
三、書寫創建用戶並設置密碼的腳本
     /dev/null  #Linux黑洞設備,專用於收集不要的輸出結果

[root@server0 ~]# vim /root/user.sh

 #!/bin/bash
 useradd test06 &> /dev/null
 echo test06創建成功
 echo 123 | passwd --stdin test06 &> /dev/null
 echo test06密碼設置成功

[root@server0 ~]#  chmod +x /root/user.sh
[root@server0 ~]# /root/user.sh
 
   變量:爲了增加腳本的適用環境的能力,增加腳本的靈活度,方便。

   變量: 容器,以不變的名稱,儲存變化的值

      變量名=變化的值

  使用變量:    $變量名


   爲了降低腳本使用難度,可以產生交互
  read   :可以產生交互,將鍵盤輸入的內容賦值給變量


[root@server0 ~]# vim /root/user.sh
 #!/bin/bash
 read  -p  '請輸入您要建立的用戶:'   user
 read  -p  '請輸入您要設置的密碼:'   pass
 useradd  $user  &> /dev/null
 echo $user創建成功
 echo $pass | passwd --stdin $user &> /dev/null
 echo $user密碼設置成功

[root@server0 ~]# /root/user.sh

 

 


#########################################################
什麼是變量
• 以不變的名稱存放的可能會變化的值
– 變量名=變量值
– 方便以固定名稱重複使用某個值
– 提高對任務需求、運行環境變化的適應能力


• 設置變量時的注意事項
– 若指定的變量名已存在,相當於爲此變量重新賦值
– 等號兩邊不要有空格
– 變量名由字母/數字/下劃線組成,區分大小寫
– 變量名不能以數字開頭,不要使用關鍵字和特殊字符


• 基本格式
– 引用變量值:$變量名
– 查看變量值:echo $變量名、echo ${變量名}


 變量的種類

 

位置變量
• 在執行腳本時提供的命令行參數(非交互式傳值)

[root@server0 ~]# vim  /root/2.sh
 #!/bin/bash
 echo $1
 echo $2
 echo $3
 echo ${10}
 echo ${11}

# /root/2.sh haha  benniu  xixi  hehe   lele   dc  tc   dz   tz 100 200

[root@server0 ~]# vim /root/3.sh
  #!/bin/bash
  cat -n $1  |  head -$2

[root@server0 ~]# /root/3.sh /etc/passwd   2
[root@server0 ~]# /root/3.sh /etc/passwd   3

 

 預定義變量
  • 用來保存腳本程序的執行信息
    – 直接使用這些變量
    – 不能直接爲這些變量賦值

     $#  已加載的位置變量的個數
    $*  所有位置變量的值
    $?  程序退出後的狀態值,0表示正常,其他值異常

 

[root@server0 ~]# vim /root/2.sh

 #!/bin/bash
 echo $1
 echo $2
 echo $3
 echo ${10}
 echo ${11}
 echo $#
 echo $*

[root@server0 ~]# /root/2.sh  1  2 3 4 5 6 7 8 9 10 11


########################################################
 運算
 
[root@server0 ~]# expr 10 / 3

[root@server0 ~]# expr 10 \* 3

[root@server0 ~]# expr 1 + 2

[root@server0 ~]# expr 3 - 1

[root@server0 ~]# expr 10  %  3    #取餘數 運算

  $() :將命令的輸出結果,作爲參數

[root@server0 opt]# date
[root@server0 opt]# date +%F
[root@server0 opt]# cd /opt

[root@server0 opt]# mkdir   $(date +%F)
[root@server0 opt]# ls
[root@server0 opt]# mkdir   mydir-$(date +%F)
[root@server0 opt]# ls
[root@server0 opt]# mkdir   MariaDB-$(date +%F)
[root@server0 opt]# ls
[root@server0 opt]# mkdir   $(hostname)-$(date +%F)

#######################################################
常用的測試選項

• 檢查文件狀態
    -e:文檔存在爲真
    -d:文檔存在且爲目錄爲真
    -f:文檔存在且爲文件爲真
    -r:文檔存在且有讀取權限爲真
    -w:文檔存在且有寫入權限爲真
    -x:文檔存在且有執行權限爲真

• 比較整數大小(帶e都有等於二字,g代表大於,l代表小於)

    -gt:大於
    -ge:大於等於
    -eq:等於
    -ne:不等於
    -lt:小於
    -le:小於等於

• 字符串比對
     == :相等
     !=:不相等


########################################################

 

 if [ 條件測試 ] ; then
     命令序列xx
 else
     命令序列yy
 fi

[root@server0 /]# vim  /root/5.sh
 #!/bin/bash
 if  [ $1 -eq $2 ];then
   echo hello
 else
   echo hi
 fi

[root@server0 /]# /root/5.sh  1 1

[root@server0 /]# /root/5.sh  1 2


   請書寫一個腳本:
      用戶輸入一個IP地址(read),判斷是否可以與該IP地址通信,
   能通則輸出 "IP ok"   否則 輸出 "IP no"

[root@server0 /]# vim  /root/6.sh

   #!/bin/bash
   read  -p  '請輸入一個IP地址:'    ip
   ping  -c  2  $ip  &> /dev/null

     if [ $? -eq 0 ];then
          echo  ${ip} ok
      else
          echo  ${ip} no
     fi

[root@server0 /]#   /root/6.sh

######################################################


 if [條件測試1] ; then
      命令序列xx
 elif [條件測試2] ; then
      命令序列yy
 else
      命令序列zz
 fi
 
     
    成績    大於等於90    優秀
      大於等於80    良好             
      大於等於70    及格  
      大於等於60    仍需努力  
      60以下          在牛的肖邦,也彈不出哥憂傷

 


[root@server0 ~]# vim /root/8.sh
#!/bin/bash
 read -p  '請輸入您的成績:'     num
if [ $num -gt  100 ];then
     echo 成績有誤
  elif [ $num -lt 0 ];then
     echo 成績有誤
  elif [ $num -ge 90 ];then
     echo 優秀
  elif [ $num -ge 80 ];then
     echo 良好
  elif [ $num -ge 70 ];then
     echo 及格
  elif [ $num -ge 60 ];then
     echo 仍需努力
  else
    echo 在牛的肖邦,也彈不出哥憂傷
fi
#####################################################


在 server0 上創建 /root/foo.sh 腳本
1)當運行/root/foo.sh redhat,輸出爲fedora
2)當運行/root/foo.sh fedora,輸出爲redhat
3)當沒有任何參數或者參數不是 redhat 或者
fedora時,其錯誤輸出產生以下信息:
  /root/foo.sh  redhat|fedora

 

 

 

     ' ':把所有的特殊字符,當作普通文本字符輸出

[root@server0 ~]# vim  /root/foo.sh
 #!/bin/bash
 if [  $1  ==  redhat  ];then
   echo  fedora
 elif [  $1  ==  fedora  ];then
   echo  redhat
 else
   echo  '/root/foo.sh  redhat|fedora'
 fi

[root@server0 ~]# /root/foo.sh redhat
[root@server0 ~]# /root/foo.sh fedora

[root@server0 ~]# /root/foo.sh haha

 


 #!/bin/bash
 if [ $# -eq 0 ];then
   echo '/root/foo.sh  redhat|fedora'
  elif [ $1 == redhat ];then
   echo fedora
  elif [ $1 == fedora ];then
   echo redhat
 else
   echo '/root/foo.sh  redhat|fedora'
 fi


      
       " ":可以將 “沒有” 變成 “ 空值”


 #!/bin/bash

 if [ "$1" == redhat ];then
   echo fedora
  elif [ "$1" == fedora ];then
   echo redhat
 else
   echo '/root/foo.sh  redhat|fedora'  >&2   #將正確輸出變成錯誤
   exit 2                                   #腳本退出返回值
 fi

####################################################
 for循環結構

  循環結構:將反覆執行的語句,循環去執行


  for 變量名 in   值列表
  do
        命令序列
  done

 


[root@server0 /]# vim  /root/for.sh
  #!/bin/bash
  for a in 1 2 3 4 5
  do
    useradd nsd$a
    echo nsd$a創建成功
  done

[root@server0 /]# vim  /root/for02.sh
  #!/bin/bash
  for a in 1 2 3 4 5
  do
      echo hello
  done

######################################################

案例5:編寫一個批量添加用戶腳本
           在 server0 上創建 /root/batchusers 腳本
    1)此腳本要求提供用戶名列表文件作爲參數
    2)如果沒有提供參數,此腳本應該給出提示
       Usage:    /root/batchusers,退出並返回相應值
    3)如果提供一個不存在的文件,此腳本應該給出提
    示 Input file not found,退出並返回相應值
    4)新用戶的登錄Shell爲 /bin/false,無需設置密碼
    5)用戶列表測試文件:
    http://cla***oom/pub/materials/userlist

     
# wget    http://cla***oom/pub/materials/userlist

[root@server0 /]# vim  /root/batchusers
 #!/bin/bash
 if [ $# -eq 0 ];then
    echo 'Usage: /root/batchusers' >&2
    exit 1
 fi
 if [ ! -e $1 ];then
    echo 'Input file not found' >&2
    exit 2
 fi
 for  a  in $(cat $1)
 do
    useradd -s /bin/false $a
    echo $a創建成功
 done

##################################################

 

 #!/bin/bash
 if [ $# -eq 0 ];then
    echo 'Usage: /root/batchusers' >&2
    exit 1
 fi
 if [ -e $1 ];then
    for  a  in $(cat $1)
     do
    useradd -s /bin/false $a
    echo $a創建成功
     done
  else
    echo 'Input file not found' >&2
    exit 2
 fi

###################################################


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章