交互输入与for语句
交互輸入與for語(yǔ)句
1.?? 交互輸入
read命令可以同時(shí)定義多個(gè)變量值;輸入的內(nèi)容默認(rèn)以空格為分隔符,將值輸入到對(duì)應(yīng)的變量中;read盡量避免交互
如果默認(rèn)值過(guò)多,最后所有的值會(huì)被賦予給最有一個(gè)變量;
如果默認(rèn)值過(guò)少,多于變量則為空值
實(shí)例:
????????? read a b c
aa bb cc
read如何輸入:
????????? read “請(qǐng)輸入一個(gè)目錄:” abc
????????? echo ?-n “請(qǐng)輸入一個(gè)目錄:”--------?? -n取消換行符? ;(分號(hào))后面加read命令進(jìn)行變量輸值
????????? echo ?-n “請(qǐng)輸入一個(gè)目錄:” ; read abc ---------原本的寫法
常用參數(shù):
????????? -p? read -p “請(qǐng)輸入一個(gè)目錄:” 變量
????????? -t? 定義超時(shí)時(shí)間 ??最好不要寫在-p的后面 ?
read? -t 5 -p “請(qǐng)輸入一個(gè)目錄:” 變量
???????? 腳本默認(rèn)值
????????????????????????? [ -n $filename ] 判斷沒(méi)有為真 輸入值
????????????????????????? 輸入內(nèi)容------------------------------------------------------------------
????????????????????????? |?????????????????????????????????????????????????????????????????????????????????????????????????????? |
????????????????????????? 輸入是否正確--------------?????????????????????????????????????????????????????????? 沒(méi)有輸入--------------
????????????????????????? |????????????????????????????????????????? |?????????????????????????????????????????????????????????? |???????????????????????????????? |
????????????????????????? 正確 ???????????????????????????? 不正確,給提示???????????????????? 提示輸入 ??給出默認(rèn)值
read可以同時(shí)定義多個(gè)
?
ls -d abc 只顯示abc
2.?? for循環(huán)
回顧:文件判斷腳本
???????? #!/bin/bash
???????? read -p “輸入一個(gè)文件名:” name
???????? if [ -z $name ];then
????????????????? echo “Usage:輸入一個(gè)文件名,/etc/fstab”
????????????????? exit 1
???????? fi
???????? if [ -e $name ];then
????????????????? echo “提示:輸入的文件不存在”
????????????????? exit 2
???????? elif [ -f $name ];then
????????????????? echo? “這個(gè)文件是普通文件”
???????? elif [ -d $name ];then
????????????????? echo? “這個(gè)文件是目錄文件”
???????? elif [ -b $name ];then
????????????????? echo? “這個(gè)文件是塊文件”
???????? elif [ -L $name ];then
????????????????? echo “這個(gè)文件是鏈接文件”
???????? else
????????????????? echo?? “這個(gè)文件是其他文件”
???????? fi
修改成case語(yǔ)句
case語(yǔ)句的語(yǔ)法格式
???????? case 變量 in
???????? PATTERN1)
?????????????????????????????????? 代碼塊1
?????????????????????????????????? ;;
???????? PATTERN2)
代碼塊2
?????????????????????????????????? ;;
???????? *)
?????????????????????????????????? 代碼庫(kù)
???????? esac
?
for語(yǔ)句的應(yīng)用場(chǎng)景:
????????????????? 有一個(gè)功能,這個(gè)功能需要循環(huán)執(zhí)行,只是執(zhí)行對(duì)象不同;【對(duì)象必須是同類數(shù)據(jù)】
For語(yǔ)句的格式:
???????? a = [‘a(chǎn)’,’b’,’c’]-------在python中,我們很多情況下,需要調(diào)用相應(yīng)的方法去生成列表
???????? for 變量 in 列表;do
????????????????????????? 循環(huán)體
???????? done
練習(xí):九九乘法表
???????? {1..9}
?
?
for i in {1..9};do
???????? for j in {1..9};do
????????????????? echo -e -n “$j*$i=$[$i*$j]\t”
???????? done
???????? echo “ ”
done
???????? echo -e 可以識(shí)別特殊字符
?
?
-e 使echo命令,能夠識(shí)別特殊字符
\r 回車不換行
\n 換行符
\t 制表符
md5sum---hash加密
?
列表的生成方式:
1、? 直接給出字符串列表
For I in a b c d e;do
????????? 循環(huán)體
done
2、? 整數(shù)列表
?
A {start..end} //{1..1}是不行的 {1..100}==python range(1,100)
B seq 命令引用 $(seq [start [step] end]) 步長(zhǎng) python range{1,00,2}
???????? ?Seq 20 30
練習(xí)1:ping掃描
#!/bin/bash
#
declare -i sum=0
for i in ${seq 1 254};do
???????? ping -c 1 -w 1 10.6.12.$i &> /dev/null
???????? if [ $? -eq 0 ];then
let sum++
echo “10.6.12.$i 是通的”
????????????????? else
????????????????????????? echo “10.6.12.$i 是不通的”
????????????????? fi
done
echo “共有$sum臺(tái)電腦在線”
練習(xí)2:1到100的偶數(shù)和
???????? #!/bin/bash
???????? #
???????? delcare -i sum=0
???????? for i in ${seq 0 2 100 } ;do
????????????????? let sum+=$i
done
echo “$sum”
3、? 返回列表的命令
$(command)
????????? 應(yīng)用場(chǎng)景:ls /var/log
????????? ls /var/log | grep “*.log$”
#!/bin/bash
#
??????????????? declare -i sum=0
??????????????? for i in /var/log/*.log;do
#?????????????????????? echo $i
??????????????????????? if [[ $i == *.log ]];then
??????????????????????????????? echo $i
??????????????????????????????? let sum++
??????????????????????? fi
??????????????? done
??????????????? echo $sum
練習(xí)3:netstat -tan 查看網(wǎng)絡(luò)狀態(tài),統(tǒng)計(jì)LISTEN出現(xiàn)的次數(shù)、ESTABLISHED出現(xiàn)的狀態(tài)
#!/bin/bash
#
declare -i sum1=0
declare -i sum2=0
declare -i sum3=0
for i in $(netstat -tan | grep "^tcp"|? awk '{print $6}');do
??????? if [ $i="LISTEN" ];then
??????????????? let sum1++
??????? elif [ $i="ESTABLISHED" ];then
??????????????? let sum2++
??????? else
??????????????? let sum3++
??????? fi
done
echo "監(jiān)聽(tīng)的鏈接有:$sum1"
echo "建立的鏈接有:$sum2"
echo "其他的有:$sum3"
?
常見(jiàn)的vim命令用法:
????????? dd 剪切 ?5dd---剪切五次
????????? p?????? 粘貼
????????? yy 復(fù)制 ?5yy—復(fù)制五次
????????? p
4、? glob機(jī)制---文件名通配符的機(jī)制
$(ls /var/log)
/var/log/*.log
???????? Test命令總結(jié):
(1)????? test的命令的option的-a,-o只在命令中使用
du命令 -h??? du -h filename
例如 [ `du -h? $file |cut -d: -f1` -lt 100K -a -x $file ]
注意:做字符串匹配的時(shí)候,不支持正則以及通配符
(2)????? test test == [[? ]]
再連接兩個(gè)test的命令的時(shí)候,不能使用命令內(nèi)部的option -a -o
一般使用 || && == != >= <=
[[ yum.log ==*.log ]]
5、? 變量引用—傳參
$@ $* 將參數(shù)作為for循環(huán)的列表
$0—和awk不一樣
???????? bash中$0代表其運(yùn)行的腳本文件
???????? awk中$0代表整行的內(nèi)容???????????????????? ----awk是按行執(zhí)行
需要多個(gè)詞的時(shí)候”$@”,需要一個(gè)詞的時(shí)候用”$*”
?
IFS-------是分隔符
keepalived –主備 需求:每一個(gè)小時(shí)去匹配一下主備設(shè)備的keepalived的配置文件是否相同
????????????????? 安全:1.加密 2.校驗(yàn) 3.原認(rèn)證 4.證書認(rèn)證(不可否性)
擴(kuò)展:for語(yǔ)句的另外一種寫法
基于C語(yǔ)言格式的for語(yǔ)句的寫法:
????????? for 變量 in列表;do
?????????????????? 循環(huán)體
????????? Done
?????????
????????? for((i=0;i<=10;i++));do
?????????????????? 循環(huán)體
????????? Done
????????? for((初始條件語(yǔ)句;條件判斷語(yǔ)句;初始值變化語(yǔ)句));do
?????????????????? 循環(huán)體
????????? done
99乘法表:
????????? for((i=1;i<=9;i++));do
?????????????????? for((j=1;j<=$i;j++));do
??????????????????????????? echo -n -e “$i*$j=$(($i*$j))\t”
?????????????????? done
?????????????????? echo “ ”
????????? done
優(yōu)點(diǎn):不宜進(jìn)入死循環(huán)
While語(yǔ)句的格式:
定義初始值----i=0
while 條件;do
????????? 循環(huán)體
????????? Let i++ //注意 初始值的變化
done
轉(zhuǎn)載于:https://www.cnblogs.com/KAJIA1/p/11392337.html
總結(jié)
以上是生活随笔為你收集整理的交互输入与for语句的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何把人民军队建成世界一流军队从大学生
- 下一篇: 真空到了负数,规管布亮是什么情况