shell脚本

标签: linux shell
74人阅读 评论(0) 收藏 举报
这篇文章主要介绍了8个实用的Shell脚本分享,本文给出了判断输入为数字、字符或其他、求平均数、自减输出、在文件中添加前缀、批量测试文件是否存在等实用脚本,需要的朋友可以参考下

几个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  

【例子:008】简单的按日期备份文件
复制代码代码如下:

#!/bin/bash  
  
NOW=$(date +"%m-%d-%Y")      # 当前日期  
FILE="backup.$NOW.tar.gz"    # 备份文件  
echo "Backing up data to /tmp/backup.$NOW.tar.gz file, please wait..."  #打印信息  
tar xcvf /tmp/backup.$NOW.tar.gz /home/ /etc/ /var       # 同时备份多个文件到指定的tar压缩文件中  
echo "Done..."         
查看评论

shell脚本精简教程

详细的介绍shell脚本的使用。
  • 2016年12月19日 14:54

关于“No space left on device的原因”

看到这个错误,第一个反应是磁盘空间满了;但df一看,每个分区的空间都还富余的很。从munin 的监控图表上看 Filesystem usage 也很平稳,但下面的 Inode usage 就有问题了,...
  • liudayu_hikvision
  • liudayu_hikvision
  • 2011-01-17 19:59:00
  • 37074

No space left on device错误解决

转载自 :http://hi.baidu.com/yonjun_feng/blog/item/c6746efc2b5c7b88b901a0cd.html   No space left on de...
  • baijd_ss
  • baijd_ss
  • 2011-09-17 10:36:37
  • 30993

Write error: No space left on device-解决办法

利用ramdisk方式启动后,想解压一个文件,但是系统提示空间不足。 root@t1040rdb:~# xz -d linux-3.19-rc5.tar.xz xz: linux-3.19-rc5...
  • helloanthea
  • helloanthea
  • 2015-01-21 11:39:57
  • 7946

No space left on device

#df /dev/sdc1             20799540  19751436         0 100% /home/sluo 无论怎么删除文件,剩余空间都为...
  • Gray_Fall
  • Gray_Fall
  • 2014-01-12 00:13:11
  • 2953

linux下 关于“No space left on device的原因”

看到这个错误,第一个反应是磁盘空间满了;但 df 一看,每个分区的空间都还富余的很。从 munin 的监控图表上看 Filesystem usage 也很平稳,但下面的 Inode usage 就...
  • zdf511391565
  • zdf511391565
  • 2014-09-09 15:14:02
  • 4456

spring boot学习5之session+redis解决session共享问题

应用的集群部署或分布式部署,经常遇到session共享的问题,要么在nginx代理解决(比如ip hash),要么在tomcat的context.xml配置redis。spring boot也提供了s...
  • dream_broken
  • dream_broken
  • 2017-05-24 15:47:50
  • 9903

Linux 系统开机可能出现的错误与分析

(假设系统中至少已经安装有grub或lilo程序,按错误可能发生的顺序,包括root帐号不 能正常登录的情况,写这个错误情况最初的目的是让自己有个大的概念,希望没有误人子 弟) 一、MBR错误:...
  • wangjialiang
  • wangjialiang
  • 2011-08-05 11:53:20
  • 1221

持续集成之Jenkins+Gitlab简介 [一]

持续集成之Jenkins+Gitlab简介 [一]标签(空格分隔): Jenkins持续集成概念持续集成Continuous Integration 持续交付Continuous Delivery 持...
  • abcdocker
  • abcdocker
  • 2016-12-23 15:18:54
  • 3474

MYSQL数据库网卡软中断不平衡问题及解决方案

原创文章,转载请注明: 转载自系统技术非业余研究 本文链接地址: MYSQL数据库网卡软中断不平衡问题及解决方案 最近公司在MySQL的数据库上由于采用了高速的如PCIe卡以及大内存,...
  • shen1936
  • shen1936
  • 2014-09-25 11:57:27
  • 941
    个人资料
    等级:
    访问量: 758
    积分: 94
    排名: 142万+
    文章分类
    文章存档