shell基础(一)


1、shell脚本是什么

    它是一种脚本语言,并非编程语言,可以使用一些逻辑判断、循环等语法。是系统命令的集合。shell脚本可以实现自动化运维,大大增大我们的工作效率



2、shell脚本结构

#!/bin/bash开头,#用于注释

bash -x可以显示脚本执行过程



3、date

date显示时间 ,如2018年 02月 01日 星期四 11:09:06 CST

date +%Y  显示四位年份,如2018

date +%M 显示分钟,如09

date +%D  显示日期,如02/01/18

date +%H 显示小时,如11

date +%S 显示秒,如06

date +%y  显示两位年份,如18

date +%m 显示两位月份,如2

date +%d 显示两位日期,如1

date +%h 显示中文月份,如2月

date +%s 显示时间戳,从1970年1月1日0点0分到现在经历了多少秒(美国纽约时间)

date +%W 表示全年第几周,如05

date +%w 表示星期几,如4


sh脚本echo时间_#if


时间戳的应用:

date -d @100  

sh脚本echo时间_逻辑判断_02



date +%F

date +%T

date +%y-%m-%d

date +"%y-%m-%d %H:%M:%S "

date +"%F %T"

sh脚本echo时间_shell_03



date -d "-1 day" +"%F %T"  查看前一天日期,下面依次类推

date -d "+1 month" +"%F %T"

date -d "+1 year" +"%F %T"

date -d "-10 hour" +"%F %T"

date -d "+10 min" +"%F %T"

date -d "+10 sec" +"%F %T"


sh脚本echo时间_shell_04



4、变量

a、变量值引用使用$

b、交互变量使用:

#!/bin/bash
#用户交互脚本 
read -p "请输入一个数字: " num
echo $num

 

sh脚本echo时间_shell_05

c、内置变量
$0 $1 $2 $# 分别表示脚本或命令本身,第一个参数,第二个参数,参数总数量。如
vim 3.sh

#!/bin/bash
#内置变量 $0 $1 $2 $#
echo "\$1=$1"
echo "\$2=$2"
echo "\$3=$3"
echo "\$#=$#"
echo "\$0=$0"

 

执行:sh 3.sh a b c d e

sh脚本echo时间_bash_06





5、数学运算

举例:

a=1;b=2

c=a+b

c=$a+$b  

c=$[$a+$b]

c=[$a+$b]

c=$($a+$b)

c=$(($a+$b))


sh脚本echo时间_bash_07




6、逻辑判断

a、if  ,等于== 或者eq,小于-lt,大于-gt,大等于ge,小于等于 le,不等于!=或者ne。如果要使用> <,if判断条件要写成如下格式:

if (($a>3))

 

 

 

 

 

 

#!/bin/bash
#if逻辑判断1
read -p "请输入一个数字: " num
echo $num
if [ $num == 1 ]
then
     echo "$num is true"
else 
     echo "$num is false"
fi

sh脚本echo时间_逻辑判断_08

#!/bin/bash
#if逻辑判断2
read -p "请输入一个数字: " num
echo $num
if [ $num == 10 ]
then
     echo "$num is true"
elif [$num -lt 10]
then
     echo "$num <10"
else
     echo "$num >10"
fi

sh脚本echo时间_#if_09



b、并且&& 、-a ,或者|| 、 -o,取余运算用%。

 

#!/bin/bash
#if逻辑判断3
read -p "请输入一个数字:" n
n2=`echo "$n"|grep -E '[^0-9]' $n|wc -l`
if [ $n2 != 0]
then
   echo "你输入的不是数字,请重新输入"
   exit 1
fi
n1=$[$n%2]
if [ $n1 -eq 0 ]
then
     echo "你输入的数字是偶数"
else 
      echo "你输入的数字是奇数"
fi

sh脚本echo时间_shell_10





c、-e判断是否存在某个文件后文件夹,-f 判断是否存在某个文件,-d判断是否存在某个文件夹,-r判断某个文件是否可读,-x判断某文件是否可执行,-w判断某文件是否可写;

 

if [ -e 1.sh ]; then echo "1.sh exist"; fi
if [ ! -e 1.sh ]; then echo "1.sh does not exist"; fi
[ -f 1.sh ] && echo "1.sh exists"
[ -f 12.sh ] || echo "1.sh exits"
[ -w 1.sh ] && echo "1.sh can be wirtten"

 

d、if还可以把一条命令的执行结果作为判断条件,当一条命令执行成功,会返回0,if会判断一条命令返回值是否等于0,如果返回值等于0,则条件成立,否则条件不成立。

 

#!/bin/bash
#if逻辑判断4
read -p "请输入一个数字:" n
#n2=`echo "$n"|grep -E '[^0-9]' $n|wc -l`
if echo $n |grep -q '[^0-9]'
#$n中有非数字字符,则grep -q命令执行成功,相当于1,否则相当于0
then
   echo "你输入的不是数字,请重新输入"
   exit 1
fi
n1=$[$n%2]
if [ $n1 -eq 0 ]
then
     echo "你输入的数字是偶数"
else 
      echo "你输入的数字是奇数"
fi

e、date相关脚本

 

#!/bin/bash
#date相关脚本
d=`date +%F`
exec > /tmp/$d.log 2>&1
echo "Begin at `date`"
ls /tmp/ssdfsf/
cd /sddfsfsdf/
echo "End at `date`"

sh脚本echo时间_sh脚本echo时间_11


exec > /tmp/$d.log 2>&1 中,2>表示错误重定向,&1表示前面的文件名$d.log ,exec一般放在脚本开头,表示exec下面的命令的输出信息全部定向到exec后面定义的日志中去,整句表示下面执行的命令无论正确还是错误的显示信息都输入到$d.log中。