日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Shell编程2

發布時間:2023/11/30 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Shell编程2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.2 條件判斷

1.2.1 按照文件類型進行判斷

-b 文件 是否存在且為狀設備文件

-c 文件 是否存在且為字符設備文件

-d 文件 是否存在且為目錄

-e 文件 是否存在

-f 文件 是否存在且為普通文件

-L 文件 是否存在且為符號鏈接文件

-p 文件 是否存在且為管道文件

-s 文件 是否存在且為非空

-S 文件 是否存在且為套接字文件

?

常用

-d 文件 是否存在且為目錄

-e 文件 是否存在

-f 文件 是否存在且為普通文件

?

兩種判斷格式

test -e /root/install.log

[ -e /root/install.log ] && echo "yes" || echo "no"

?

echo $? 判斷上一條命令是否正確 0為正確

?

1.2.2 按照文件權限進行判斷

-r 文件 是否存在并且可讀

-w 文件 是否存在并且可寫

-x 文件 是否存在并且可運行

-u 文件 是否存在并且有SUID權限

-g 文件 是否存在并且有SGID權限

-k 文件 是否存在并且有SBit權限

?

1.2.3 兩個文件之間進行比較

文件1 -nt 文件2 ? ? ?文件1的修改時間是否比文件2

文件1 -ot 文件2 ? ? ?文件1的修改時間是否比文件2

文件1 -ef 文件2 ? ? ?判斷Inode號是否一致,是否為同一個文件。可用于判斷硬連接。

?

1.2.4 兩個整數之間比較

整數1 -eq 整數2 是否相等

整數1 -ne 整數2 ? 是否不等

整數1 -gt 整數2 ? 是否大于

整數1 -lt 整數2 ? 是否小于

整數1 -ge 整數2 ? 是否大于等于

整數1 -le 整數2 ? 是否小于等于

?

1.2.5 字符串判斷

-z 字符串 是否為空

-n 字符串 是否非空

字串1 == 字串2 是否相等

字串1 != 字串2 是否不等

?

name=sc //等號兩邊不能有空格

[ -z "$name" ] && echo yes || echo no

no 結果

?

1.2.6 多重條件判斷

判斷1 -a 判斷2 邏輯與

判斷1 -o 判斷2 邏輯或

判斷 邏輯非,原始判斷取反

?

1.3 流程控制

if ?case ?for ?while

11.3.1單分支if條件語句

if [ 條件判斷式 ];then

????程序

fi

?

if [ 條件判斷式 ]

??then

????程序

fi

所有的計算機技術,不是學會的,而是練會的。


例子

#!/bin/bash

#統計根分區使用率

?

rate=$(df -h | grep "/dev/sda2" | awk '{print $5}' | cut -d "%" -f 1)

#把根分區使用率作為變量值賦予變量rate

?

if [ $rate -ge 80 ]

??then

????echo "Warning! /dev/sda2 is full!!!"

fi

?

1.3.2 雙分支if條件語句

if [ 條件判斷式 ]

????then

????????條件成立時,執行的程序

????else

????????條件不成立時,執行的另一個程序

fi

?

例子

#!/bin/bash

#備份mysql數據庫

?

ntpdate asia.pool.ntp.org &>/dev/null

#同步系統時間 ????????????輸出內容丟棄

?

date=$(date +%y%m%d)

#時間戳

?

size=$(du -sh /var/lib/mysql)

#統計mysql數據庫的大小

?

if [ -d /tmp/dbbak ]

????then

echo "Date : $date!" > /tmp/dbbak/dbinfo.txt

echo "Data size : $size" >> /tmp/dbbak/dbiinfo.txt

cd /tmp/dbbak

tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt

????????&>/dev/null

rm -rf /tmp/dbbak/dbinfo.txt

????else

mkdir /tmp/dbbak

echo "Date : $date!" > /tmp/dbbak/dbinfo.txt

echo "Data size : $size" >> /tmp/dbbak/dbiinfo.txt

cd /tmp/dbbak

tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt

????????&>/dev/null

rm -rf /tmp/dbbak/dbinfo.txt

fi

?

?

啟動Apache

service httpd start

查詢Apache是否啟動

ps aux | grep httpd

判斷端口

netstat -tlun

安裝nmap工具

yum -y install nmap

?

例子

#!/bin/bash

#判斷Apache是否啟動

port=$(nmap -sT 192.168.143.132 | grep tcp | grep http | awk '{print $2}')

#使用nmap命令掃描服務器,并截取Apache服務的狀態,賦予變量prot

?

if [ "$port" == "open"]

????then

echo "$(date) httpd is OK!" >> /tmp/autostart-acc.log

????else

? /etc/rc.d/init.d/httpd start &>/dev/null

echo "$(date) restart httpd!!" >> /tmp/autostart-err.log

fi

?

1.3.3 多分支if條件語句

if [ 條件判斷式1 ]

??then

????當條件判斷1成立時,執行程序1

elif [ 條件判斷式2 ]

??then

????當條件判斷2成立時,執行程序2

...

?

else

????當所有條件都不成立時,最后執行此程序

fi

?

例子

#!bin/bash

#判斷用戶輸入的是什么文件

?

read -p "Please input a filename: " file

#接收鍵盤的輸入,并賦予變量file

?

if [ -z "$file" ]

#判斷file變量是否為空

????then

echo "Error, please input a filename."

exit 1

elif [ ! -e "$file" ]

#判斷file的值是否存在

????then

echo "Your input is not a file!"

exit 2

elif [ -f "$file" ]

#判斷file的值是否為普通文件

????then

echo "$file is a regulare file!"

elif [ -d "$file"]

#判斷file的值是否為目錄文件

????then

echo "$file is a directory!"

else

echo "$file is an other file!"

fi

?

1.3.4 case語句

case $變量名 in

????"1")

????????程序1

????????;;

????"2")

????????程序2

????????;;

????... ...

????*)

????????如果哦變量值都不是以上的值,此程序

????????;;

esac

?

1.3.5 for循環

語法一

for 變量 in 1 2 3 ...

????do

??????程序

????done

?

例子

#/bin/bash

#打印時間

for time in morning noon afternoon evening

????do

????????echo "This time is $time!"

????done

?

#!/bin/bash

#批量解壓縮腳本

cd /lamp

ls *.tar.gz >ls.log

for i in $(cat ls.log)

????do

??????tar -zxf $i &>/dev/null

????done

rm -rf /lamp/ls.log

?

語法二

for ((初始值;循環控制條件;變量變化))

??do

????程序

??done

?

例子

#!/bin/bash

#1加到100

s=0

for((i=1; i<=100; i=i+1))

??do

????s=$(($s+$i))

??done

echo "The sum of 1+2+...+100 is : $s"

?

#!/bin/bash

#批量添加指定數量的用戶

read -p "input user name: " -t 30 name

read -p "input the number of user: " -t 30 num

read -p "input the password of user: " -t 30 pass

if [ ! -z "$name" -a ! -z "$num" -a ! -z "$pass" ]

????then

????y=$(echo $num | sed 's/[0-9]//g')

????????if [ -z "$y" ]

????then

????for((i=1; i<=$num; i=i+1))

?? do

????/usr/sbin/useradd $name$i &>/dev/null

????echo $pass |/usr/bin/passwd--stdin $name$i &>/dev/null

done

fi

fi

?

1.3.6 while循環

不定循環,也稱作條件循環。

只要條件判斷式成立,循環就會一直繼續。

for的固定循環不太一樣。

?

while [ 條件判斷式 ]

??do

????程序

??done

?

例子

#!/bin/bash

#1加到100

i=1

s=0

while [ $i -le 100 ]

??do

????s=$(($s+$i))

????i=$(($i+1))

??done

echo "The sum is: $s"

?

until循環

while循環相反,只要條件判斷式不成立則進行循環

?

until [ 條件判斷式 ]

??do

????程序

??done

?

例子

#!/bin/bash

#1加到100

i=1

s=0

util [ $i -gt 100 ]

??do

????s=$(($s+$i))

????i=$(($i+1))

??done

echo "The sum is: $s"

腳本語言:不適用于數值計算,主要用于輔助系統運維工作

好處:無需編譯,所見即所得

壞處:運行速度慢


總結

以上是生活随笔為你收集整理的Shell编程2的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。