0811linux基礎小記(shell編程基礎)

1.編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小。

#!/bin/bash

echo "hostname: `hostname`"

echo "OS VERSION: `cat /etc/issue`"

echo "KERNEL VERSION: `uname -r`"

echo "CPU MODEL:`lscpu|grep 'Model name'|tr -s " "|cut -d: -f2`"

echo "MEM CAPACITY:`cat /proc/meminfo|head -1|tr -s " "|cut -d: -f2`"

echo "DISK CAPACITY: `fdisk -l|sed -n 2p|sed -r 's@.*[[:space:]]([0-9].*GB).*@\1@g'`"

echo "IPv4: `ifconfig|sed -n 2p|sed -r 's#.*inet[[:space:]](.*)[[:space:]]*net.*#\1#g'`"blob.png

blob.png

2.編寫腳本/root/bin/backup.sh,可實現每日將/etc/目錄備份到/root/etcYYYY-mm-dd

#!/bin/bash

backdir="/root/etc$(date +%F)"

cp -r /etc/. $backdir && echo "backup $backdir finished."

blob.png

blob.png

3.編寫腳本/root/bin/disk.sh,顯示當前硬盤分區中空間利用率最大的值

#!/bin/bash

echo "the max use of disk is `df -h|tr -s " "|cut -d " " -f5|sed -n '2,$p'|sort -n|tail -1`"

blob.png

blob.png

4.編寫腳本/root/bin/links.sh,顯示正連接本主機的每個遠程主機的IPv4地址和連接數,并按連接數從大到小排序

#!/bin/bash

echo -e "遠程主機連接統計為:\n\t連接數\t遠程主機IP"

netstat -nt|tr -s ' '|cut -d' ' -f5|tr -cs '0-9.' '\n'|egrep '([0-9]+.){3}[0-9]+'|sort|uniq -c|sort -nr|tr -s ' ' '\t'

blob.png

blob.png

5.寫一個腳本/root/bin/sumid.sh,計算/etc/passwd文件中的第10個用戶和第20用戶的ID之和

#!/bin/bash

id1=`cat /etc/passwd|sed -n 10p|cut -d: -f3`

id2=`cat /etc/passwd|sed -n 20p|cut -d: -f3`

sum=$[id1+id2]

echo "the sum of two users ID is $sum"

blob.png

6.寫一個腳本/root/bin/sumspace.sh,傳遞兩個文件路徑作為參數給腳本,計算這兩個文件中所有空白行之和

#!/bin/bash

File1=`grep '^$' $1|wc -l`

File2=`grep '^$' $2|wc -l`

let Sumspace=$File1+$File2

echo "the sum of $1 and $2 spacelines are $Sumspace"

unset File1

unset File2

unset Sumspace

blob.png

blob.png 


7.寫一個腳本/root/bin/sumfile.sh,統計/etc, /var, /usr目錄中共有多少個一級子目錄和文件

#!/bin/bash

File1=`ls -A /etc |wc -l`

File2=`ls -A /var |wc -l`

File3=`ls -A /usr |wc -l`

let Sumfile=$File1+$File2+$File3

echo "the number of all 1level dir and file are $Sumfile"blob.png

blob.png

8.寫一個腳本/root/bin/argsnum.sh,接受一個文件路徑作為參數;如果參數個數小于1,則提示用戶“至少應該給一個參數”,并立即退出;如果參數個數不小于1,則顯示第一個參數所指向的文件中的空白行數

#!/bin/bash

[[ $# -lt 1 ]] && echo "at least give a parameter" ||  echo "The number of blank lines in the file that the 1st arg points to is  `grep '^$' $1|wc -l`"

blob.png

blob.png

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

#!/bin/bash

ping -c1 -W1 $1 &> /dev/null && echo the host is up || echo the host is down

blob.png

blob.png

10.chmod -rw /tmp/file1,編寫腳本per.sh,判斷當前用戶對/tmp/fiile1文件是否不可讀且不可寫

#!/bin/bash

[ -r /tmp/file1 -a -w /tmp/file1 ] && echo "可讀可寫" || echo  "不可讀不可寫"

blob.png

blob.png

11.編寫腳本nologin.shlogin.sh,實現禁止和充許普通用戶登錄系統。

vim nologin.sh

#!/bin/bash

[ -f /etc/nologin ] && echo "ordinary user can't log on." || touch /etc/nologin;

echo "ordinary user can't log on."

blob.png

vim login.sh

#!/bin/bash

[ -f /etc/nologin ] && (rm -rf /etc/nologin;echo "ordinary user can log on.") ||

 echo "ordinary user can log on."

blob.png

12.寫一個腳本/root/bin/hostping.sh,接受一個主機的IPv4地址做為參數,先判斷是否合格IP,否,提示IP格式不合法并退出,是,測試是否可連通。如果能ping通,則提示用戶“該IP地址可訪問”;如果不可ping通,則提示用戶“該IP地址不可訪問”

過濾ip 

#!/bin/bash

echo $1 > loginip

egrep "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\>" loginip &> /dev/null && echo "It's a qulified IP" && (ping -c1 -W1 $1 &> /dev/null && echo the host is up || echo the host is down) || (echo "It's an illegal IP";exit)

blob.png

blob.png

13.計算1+2+3+…+100的值

echo $((`seq -s+ 1 100`))

echo 0 +{1..100} | bc

for i in {1..100};do let "sum=$sum +$i";echo "sum=$sum";done 

14.計算從腳本第一參數A開始,到第二個參數B的所有數字的總和,判斷B是否大于A,否提示錯誤并退出,是則計算之

#!/bin/bash

[ $1 -lt $2 ] && echo $((`seq -s+ $1 $2`)) || (echo " $2 !> $1 . error!" ; exit)

blob.png

blob.png

 

 

 

$# 是傳給腳本的參數個數

$0 是腳本本身的名字

$1 是傳遞給該shell腳本的第一個參數

$2 是傳遞給該shell腳本的第二個參數

$@ 是傳給腳本的所有參數的列表

$* 是以一個單字符串顯示所有向腳本傳遞的參數,與位置變量不同,參數可超過9

$$ 是腳本運行的當前進程ID

$? 是顯示最后命令的退出狀態,0表示沒有錯誤,其他表示有錯誤

blob.png

blob.png

 

 

$*
所有的位置參數,被作為一個單詞.
注意:"$*"必須被""引用.
$@
與$*同義,但是每個參數都是一個獨立的""引用字串,這就意味著參數被完整地傳遞,
并沒有被解釋和擴展.這也意味著,參數列表中的每個參數都被當成一個獨立的單詞.
注意:"$@"必須被引用.

$@ $* 只在被雙引號包起來的時候才會有差異
雙引號括起來的情況:
$*將所有的參數認為是一個字段

 

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

(0)
victorycommandervictorycommander
上一篇 2016-08-15
下一篇 2016-08-15

相關推薦

  • grub知識與故障排除

    知識點回顧 at 任務的存放位置:/var/spool/at/ crond 任務存放位置:/var/spool/cron/username 查看服務有沒有運行 centos6:  service  atd  status    chkconfig –list atd chkconfig atd o…

    Linux干貨 2016-09-13
  • Linux文件權限管理及目錄文件的深入理解。

    文件權限及目錄 初學Linux,感覺這個東西該復雜,而且邏輯非常的強。難~! 自己根據學習到的理論和實踐,得出的對文件權限,進程,以及特殊權限的深入理解。希望能解決初學者對于權限的困惑。如有錯誤請指正。 文件的權限,指定的是什么? 是文件的權限位上的權限,針對三類用戶,任何用戶都必須是三類用戶中的一種,屬主屬組和其他人的權限rwx   &…

    Linux干貨 2016-08-10
  • 安裝CentOS 6.9與CentOS7.3

    今天學習了如何安裝CentOS6.9與CentOS7.3. 安裝CentOS6.9 首先打開虛擬機如下如所示: 然后點擊創建新的虛擬機: 選擇典型,然后點擊下一步: 一般會選擇稍后安裝操作系統,然后點擊下一步 客戶機操作系統有很多,因為今天只安裝CentOS 所以選擇Linux 版本則選擇CentOS 64 位 (因為CentOS7以上沒有32位版本,只有C…

    2017-07-14
  • 馬哥教育網絡班22期+第8周課程練習 忍者亂太郎喻成

    第八周 1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 一個好的鏈接,主要的參考http://www.cnblogs.com/imapla/archive/2013/03/12/2955931.html簡單的總結和自己的理解橋接器(network bridge),又稱網橋,一種網絡設備,負責網絡橋接(network …

    Linux干貨 2016-12-26
  • rsyslog學習

    一、rsyslog日志服務簡介 二、rsyslog的配置詳解 三、實現日志服務器收集日志及last、lastb、dmseg命令的使用 四、實現日志存儲在mysql中 一、rsyslog日志服務簡介 日志的概念好理解,日志作用可用于排障和追溯審計的等 1、rsyslog是一個C/S架構的服務,可監聽于某套接字,幫其它主機記錄日志信息,在linux系統中可以分類…

    Linux干貨 2016-10-24
  • 淺談Linux賬號與用戶組管理

    在學習linux系統中,最重要的莫過于對系統賬戶的管理以及如何恰當的分配用戶組權限。在我們登陸linux系統的時候,輸入的賬號,其實并不是linux所能識別的。由于計算機僅能夠識別0與1,所以它僅能認識ID(一組號碼)用戶標示符UID、GID。相應的你所輸入的賬號與ID的對應關系就保存在/etc/passwd當中。 對于每一個文件來說都具有”所有者與所屬用戶…

    2017-07-22

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-16 16:53

    作業完成的很出色,標題需要用點心,盡量不要帶日期,總結部分不能省略哦,好記性不如爛筆頭。

欧美性久久久久