原创

Shell常用脚本

Shell 常用脚本

1.流程控制

条件判断

a=10
b=20
if [ $a == $b ]
then
   echo "a 等于 b"
elif [ $a -gt $b ]
then
   echo "a 大于 b"
elif [ $a -lt $b ]
then
   echo "a 小于 b"
else
   echo "没有符合的条件"
fi

for 循环

#从数组遍历
for loop in 1 2 3 4 5
do
  echo "The value is: $loop"
done

#从1到10
for((i=1;i<=10;i++));
do
 echo $i;
done

while 循环

#!/bin/bash
int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done

无限循环

while true
do
 echo ”www.gameboys.cn”
 sleep 1
done

case 多选择

while true
do
    echo -n "输入 1 到 5 之间的数字: "
    read aNum
    case $aNum in
        1|2|3|4|5) echo "你输入的数字为 $aNum!"
        ;;
        11|55|66) echo "输入的数字为 $aNum!"
        ;;
        *) echo "你输入的数字不是 1 到 5 之间的!"
            continue
            echo "游戏结束"
        ;;
    esac
done

2.判断文件、文件夹是否存在

# -d 参数判断文件夹是否存在
if [ ! -d "$folder"]; then
 mkdir "$folder"
fi

# -f 参数判断文件是否存在
if [ ! -f "$file" ]; then
 touch "$file"
fi

3.求运行时间

starttime=`date +'%Y-%m-%d %H:%M:%S'`
echo "开始时间:"${starttime}
#执行逻辑
endtime=`date +'%Y-%m-%d %H:%M:%S'`
echo "结束时间:"${endtime}
start_seconds=$(date --date="$starttime" +%s);
end_seconds=$(date --date="$endtime" +%s);
echo "开始时间戳"${start_seconds}
echo "结束时间戳"${end_seconds}
echo "本次运行时间: "$((end_seconds-start_seconds))"s"

4.时间相关

#今天的时间
v_date=`date "+%Y-%m-%d %H:%M:%S"`
#前一天
v_date_ago_1=`date -d "$v_date -1 day" +%Y%m%d`
后一天
v_date_future_1=`date -d "$v_date 1 day" +%Y%m%d`
#获取前一个月、后一个月的日期
v_date_ago_1month=`date -d "$v_date -1 month" +%Y%m%d` #遇到2月闰月的时候,会有问题,比如20170329,前一个月会变成20170301
v_date_ago_1month_leap=`date -d "20170329 -1 month" +%Y%m%d`
v_date_future_1month=`date -d "$v_date 1 month" +%Y%m%d`

5.使用 mysql

#!/bin/sh
ShellPath=$(cd "$(dirname "$0")"pwd)
DBName=test
DBUser=root
DBPasswd=root
DBHost=127.0.0.1
mysql ${DBName} -h${DBHost} -u${DBUser} -p${DBPasswd} < ${insertData}

6.使用 redis

REDIS_HOST=localhost
REDIS_PORT=6379
key_liveTime=`redis-cli -h $REDIS_HOST -p $REDIS_PORT TTL $key`

7.shell 求两个数相除后的百分比

#!/bin/bash
a=38
b=99

percent_1=$(printf "%d%%" $((a*100/b)))
# 或者
percent_2=`awk 'BEGIN{printf "%.1f%%\n",('$a'/'$b')*100}'`
# 保留1位小数,四舍五入
echo $percent_1
echo $percent_2

8.shell数组的两种遍历方式

#!/bin/bash
nameArr=(aa bb cc)
ageArr=(11 22 33)

# 使用下标遍历
echo "使用下标遍历"
for ((j=0; j<${#nameArr[@]};j++)) do
  name=${nameArr[$j]}
  age=(${ageArr[$j]})
  echo $j
  echo ${name}
  echo ${age}
done

#使用foreach遍历
echo "使用foreach遍历"
for name in ${nameArr[@]}do
 echo ${name}
done


9.使用函数

#!/bin/bash

function doSomething(){
 name=$1
 echo ${name}

}

name=aaa
doSomething ${name}


10.SHELL 读取文件的每一行内容并输出,三种方式

#!/bin/bash

while read line
do
    echo $line
done < test.txt



#!/bin/bash

cat test.txt | while read line
do
    echo $line
done



for line in `cat  test.txt`
do
    echo $line
done

11.while循环执行多次次执行其他逻辑


#!/bin/bash


ShellPath=$(cd "$(dirname "$0")"pwd)

a=${ShellPath}/a

i=0 
 #遍历需要发送的玩家,发消息
while read line
do
        let "i++"
  #这里要注意,如果then放到和if一行,需要在中间加;
        if [ $i == 20 ]
                then
                echo "bbbb";
                i=0;
        fi
        echo "aaa$i"
done < ${a}

正文到此结束