shell練習題
- 編寫shell指令碼,計算1-100的和
!#/bin/bash
##計算求和
##Writen by zcy 2018-4-28
sum=0
for i in `seq 1 100`; do
sum=$[$i+$sum]
done
echo $sum
2 . 編寫shell指令碼,要求輸入一個數字,然後計算出從1到輸入數字的和,要求,如果輸入的數字小於1,則重新輸入,直到輸入正確的數字為止;
#!/bin/bash
##互動
##writen by zcy 2018-4-28
#! /bin/bash
n=0
while [ $n -lt "1" ]; do
read -p "Please input a number, it must greater than "1":" n
done
sum=0
for i in `seq 1 $n`; do
sum=$[$i+$sum]
done
echo $sum
3 . 編寫shell指令碼,把/root/目錄下的所有目錄(只需要一級)拷貝到/tmp/目錄下
#! /bin/bash
cd /root
for f in `ls `; do
if [ -d $f ] ; then
cp -r $f /tmp/
fi
done
~
4 . 編寫shell指令碼,批量建立使用者user_00, user_01, … user_100並且所有使用者同屬於users組
#! /bin/bash
groupadd users
for i in `seq 0 9`; do
useradd -g users user_0$i
done
for j in `seq 10 100`; do
useradd -g users user_$j
done
5 . 編寫shell指令碼,擷取檔案test.log中包含關鍵詞 ‘abc’ 的行中的第一列(假設分隔符為 ”:” ),然後把擷取的數字排序(假設第一列為數字),然後列印出重複次數超過10次的列
#! /bin/bash
awk -F':' '$0~/abc/ {print $1}' test.log >/tmp/n.txt
sort -n n.txt |uniq -c |sort -n >/tmp/n2.txt
awk '$1>10 {print $2}' /tmp/n2.txt
6 編寫shell指令碼,判斷輸入的IP是否正確(IP的規則是,n1.n2.n3.n4,其中1
#! /bin/bash
checkip() {
if echo $1 |egrep -q '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' ; then
a=`echo $1 | awk -F. '{print $1}'`
b=`echo $1 | awk -F. '{print $2}'`
c=`echo $1 | awk -F. '{print $3}'`
d=`echo $1 | awk -F. '{print $4}'`
for n in $a $b $c $d; do
if [ $n -ge 255 ] || [ $n -le 0 ]; then
echo "the number of the IP should less than 255 and greate than 0"
return 2
fi
done
else
echo "The IP you input is something wrong, the format is like 192.168.100.1"
return 1
fi
}
rs=1
while [ $rs -gt 0 ]; do
read -p "Please input the ip:" ip
checkip $ip
rs=`echo $?`
done
echo "The IP is right!"
作業題
shell指令碼中,怎麼做可以把某一行給註釋掉?
在行首使用#來註釋掉
如何執行一個shell指令碼呢?
sh xx.sh
或者給予X許可權後 ./xx.sh
為了方便管理,我們約定把shell指令碼都放到哪個目錄下?
/usr/local/bin
為了更好的除錯shell指令碼,我們可以加一個選項來觀察shell指令碼的執行過程,是哪個選項呢?
-x選項
使用date命令列印5天前的日期,要求日期格式為: xxxx-xx-xx
date --date "5 days ago" +"%Y-%m-%d"
或
date --date "5 days ago" +"%F"
指令碼中,變數賦值=左右2邊不能有空格
shell指令碼中如何使用數學運算
#!/bin/bash
a=1
b=3
c=$[$a+$b]
echo $c
- shell指令碼中有一個命令可以實現指令碼和使用者互動,請問是哪個命令,怎麼使用?
read -p
- 在shell中如何進行大小或者等於判斷?
-gt 大於
-lt 小於
-ge 大於等於
-le 小於等於
-eq 等於
-ne 不等於
- shell指令碼中,用什麼符合表示並且,用什麼符合表示或者?
並且 && 或者 ||
- shell指令碼中,case邏輯判斷的結構是什麼樣的?
case 變數名 in
value1)
command
;;
value2)
command
;;
*)
command
;;
esac
- 列舉出shell指令碼中常用的迴圈結構。
for 變數名 in 條件; do …. done
while 條件; do … done
- shell指令碼中函式的作用是什麼?函式結構是什麼樣的?
作用:就是把一段程式碼整理到了一個小單元中,並給這個小單元自定義名字,方便呼叫
function filename(){
command
}
- 寫指令碼實現,把一個目錄下的所有檔案(不含有目錄)全部在檔案
名後面加一個.bak
#!/bin/bash
for i in `ls -al|grep -v 'd'|awk -F ' ' '{print $9}'`;do
mv $i $i".bak"
done
- 編寫一個shell指令碼,講當前目錄下大小大於100K的檔案全部移動到/tmp/ 目錄下。
#!/bin/bash
value=`ls -l|awk -F ' ' '{print $5,$NF}' | awk '{if($1>100) {print $NF}}'`
for file in $value
do
mv $file /tmp/
done
- 寫一個小指令碼,獲取本機的HOSTNAME、IP地址以及DNS地址。
hostname=`hostname`
echo "hostname : " $hostname
ip=`/sbin/ifconfig -a | grep 'inet addr' | awk -F ':' '{print $2}' | awk '{print $1}'`
for i in $ip
do
echo "`ifconfig | grep -B1 "$i" | grep -v 'inet addr' | awk '{print $1}'` "$i""
done
DNS=`cat /etc/resolv.conf |grep nameserver|grep -v '#'`
echo $DNS
- 寫兩個小指令碼驗證break和continue在迴圈中的作用
for i in `seq 1 10`;do
if [ $i -ne 5 ];then
echo $i
else
break
fi
done
for i in `seq 1 10`;do
if [ $i -ne 5 ];then
echo $i
else
continue
fi
done
差別為,一個直接終止迴圈,一個終止不符合條件的輸出,迴圈將繼續。
相關文章
- 新手練習:Python練習題目Python
- 習題練習題-第二題
- NFS練習題NFS
- SQL練習題SQL
- mysql練習題MySql
- TypeScript 練習題TypeScript
- 練習題-9
- Python 練習題Python
- linux練習題(二)Linux
- python練習題解析Python
- 程式練習題(2)
- Ubuntu linux命令練習1 shell seq rand 格式化UbuntuLinux
- 軟體工程練習題軟體工程
- Python函式練習題Python函式
- python相關練習題Python
- mysql函式練習題MySql函式
- 3 月水題練習
- JAVA 基礎練習題Java
- java String類練習題Java
- Java Web概述-練習題JavaWeb
- Python基礎練習題Python
- 五、python的練習題Python
- mysql面試練習題MySql面試
- java異常練習題Java
- linux基礎練習題Linux
- 【shell 練習5】編寫簡單的多級選單
- 函式指標練習題函式指標
- vsc練習問題記錄
- (前++) 和 (後++)的練習題
- CAD入門級練習題
- web前端 javascript 練習題一Web前端JavaScript
- 動態規劃練習題動態規劃
- Java練習題-評委打分Java
- python006 列表練習題Python
- 方法的三個練習題
- Python-100 練習題 02Python
- 第七章練習題
- python練習冊-第0000題Python