您的位置:首页 > 运维架构 > Shell

实用shell脚本

2019-02-23 21:08 405 查看

脚本中设置变量时左右没有空格 ;   --  A=12    B="幸福像花儿一样"

运算符:

 

 

 

实用shell脚本,最好是项目或工作中实际用到过:

 

【例子:001】判断输入为数字,字符或其他

#!/bin/bash  
read -p "Enter a number or string here:" input  
  
case $input in  
   [0-9]) echo -e "Good job, Your input is a numberic! \n" ;;  
[a-zA-Z]) echo -e "Good job, Your input is a character! \n" ;;  
       *) echo -e "Your input is wrong, input again!   \n"  ;;  
esac 

【例子:002】求平均数

#!/bin/bash  
  
# Calculate the average of a series of numbers.  
  
SCORE="0"  
AVERAGE="0"  
SUM="0"  
NUM="0"  
  
while true; do  
  
  echo -n "Enter your score [0-100%] ('q' for quit): "; read SCORE;  
  
  if (("$SCORE" < "0"))  || (("$SCORE" > "100")); then  
    echo "Be serious.  Common, try again: "  
  elif [ "$SCORE" == "q" ]; then  
    echo "Average rating: $AVERAGE%."  
    break  
  else  
    SUM=$[$SUM + $SCORE]  
    NUM=$[$NUM + 1]  
    AVERAGE=$[$SUM / $NUM]  
  fi  
  
done  
  
echo "Exiting."  

【例子:003】自减输出

[scriptname: doit.sh]  
while (( $# > 0 ))  
do  
  echo $*  
  shift  
done   
          
/> ./doit.sh a b c d e  
a b c d e  
b c d e  
c d e  
d e  
e

【例子:004】在文件中添加前缀

# 人名列表  
# cat namelist  
Jame  
Bob  
Tom  
Jerry  
Sherry  
Alice  
John  
  
# 脚本程序  
# cat namelist.sh  
#!/bin/bash  
for name in $(cat namelist)  
do  
        echo "name= " $name  
done  
echo "The name is out of namelist file"  
  
# 输出结果  
# ./namelist.sh  
name=  Jame  
name=  Bob  
name=  Tom  
name=  Jerry  
name=  Sherry  
name=  Alice  
name=  John 

【例子:005】批量测试文件是否存在

[root@host ~]# cat testfile.sh        
#!/bin/bash  
  
  
for file in test*.sh  
do  
  if [ -f $file ];then  
     echo "$file existed."  
  fi  
done  
  
[root@host ~]# ./testfile.sh  
test.sh existed.  
test1.sh existed.  
test2.sh existed.  
test3.sh existed.  
test4.sh existed.  
test5.sh existed.  
test78.sh existed.  
test_dev_null.sh existed.  
testfile.sh existed.  

【例子:005】用指定大小文件填充硬盘

[root@host ~]# df -ih /tmp  
Filesystem            Inodes   IUsed   IFree IUse% Mounted on  
/dev/mapper/vg00-lvol5  
                       1000K    3.8K    997K    1% /tmp  
[root@host ~]# cat cover_disk.sh  
#!/bin/env bash  
counter=0  
max=3800  
remainder=0  
while true  
do  
    ((counter=counter+1))  
    if [ ${#counter} -gt $max ];then  
        break  
    fi  
    ((remainder=counter%1000))  
    if [ $remainder -eq 0 ];then  
        echo -e "counter=$counter\tdate=" $(date)  
    fi  
    mkdir -p /tmp/temp  
    cat < testfile > "/tmp/temp/myfile.$counter"  
    if [ $? -ne 0 ];then  
        echo "Failed to write file to Disk."  
        exit 1  
    fi  
done  
echo "Done!"  
[root@host ~]# ./cover_disk.sh  
counter=1000    date= Wed Sep 10 09:20:39 HKT 2014  
counter=2000    date= Wed Sep 10 09:20:48 HKT 2014  
counter=3000    date= Wed Sep 10 09:20:56 HKT 2014  
cat: write error: No space left on device  
Failed to write file to Disk.  
dd if=/dev/zero of=testfile bs=1M count=1  

【例子:006】通过遍历的方法读取配置文件

[root@host ~]# cat hosts.allow  
127.0.0.1  
127.0.0.2  
127.0.0.3  
127.0.0.4  
127.0.0.5  
127.0.0.6  
127.0.0.7  
127.0.0.8  
127.0.0.9  
[root@host ~]# cat readlines.sh  
#!/bin/env bash  
i=0  
while read LINE;do  
    hosts_allow[$i]=$LINE  
    ((i++))  
done < hosts.allow  
for ((i=1;i<=${#hosts_allow[@]};i++)); do  
    echo ${hosts_allow[$i]}  
done  
echo "Done"  
[root@host ~]# ./readlines.sh  
127.0.0.2  
127.0.0.3  
127.0.0.4  
127.0.0.5  
127.0.0.6  
127.0.0.7  
127.0.0.8  
127.0.0.9  
Done

【例子:007】简单正则表达式应用

[root@host ~]# cat regex.sh  
#!/bin/env sh  
#Filename: regex.sh  
regex="[A-Za-z0-9]{6}"  
if [[ $1 =~ $regex ]]  
then  
  num=$1  
  echo $num  
else  
  echo "Invalid entry"  
  exit 1  
fi  
[root@host ~]# ./regex.sh 123abc  
123abc  
  
#!/bin/env bash  
#Filename: validint.sh  
validint(){  
    ret=`echo $1 | awk '{start = match($1,/^-?[0-9]+$/);if (start == 0) print "1";else print "0"}'`  
    return $ret  
}  
  
validint $1  
  
if [ $? -ne 0 ]; then  
    echo "Wrong Entry"  
    exit 1  
else  
    echo "OK! Input number is:" $1  
fi 

 

 

 

 

 

 

 

 

 

 

 

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: