首页 > 代码库 > shell

shell

脚本编写及常见运算

 

.算术运算符及相关体验

 

<变量>++ 增量后  (先返回变量再进行运算)

<变量>-- 减量后

- 减法

例:

[root@web1 ~]# echo $[1-2]

-1

+ 加法

例:

[root@web1 ~]# echo $[1+2]

3

** 幂运算

例:

[root@web1 ~]# echo $[2**2]

4

* 乘法

例:

[root@web1 ~]# echo $[2*3]

6

/ 除法(取整) ##只取整数部分

例:

[root@web1 ~]# echo $[10/2]

5

[root@web1 ~]# echo $[10/4]

2

% 余数(取余)

例:

[root@web1 ~]# echo $[10%4]

2

[root@web1 ~]# echo $[10%8]

2

+= 加等

例:

[root@web1 ~]# i=1;j=2;echo $[j+=i]

3 ##i=1 j+=i <=> j=j+i ##j+=i就是之前的j加i等于现在的j

 

-= 减等

例:

[root@web1 ~]# i=1;j=3;echo $[j-=i]

2 ##i=1 j-=i <=> j=j-i ##j-=i就是之前的j减i等于现在的j

 

实验1.++和+=的体验

[root@web1 ~]# vim ty.sh ##i=1 i<10 j+=i j=1 i++ i=2

#!/bin/bash ##i=2 i<10 j+=i j=3 i++ i=3

for ((i=1;i<10;i++)) ##......

do ##i=9 i<10 j+=i j=45 i++ i=10

        ((j+=i)) ##i=10 i<10不成立  j=45

done

        echo $j

[root@web1 ~]# sh ty.sh

45

实验2.变量++体验

[root@web1 ~]# vim ty2.sh

#!/bin/bash

for ((i=1;i<10;i++))

do

        echo $i

done

[root@web1 ~]# sh ty2.sh

1

2

3

4

5

6

7

8

9

实验3.变量--体验

[root@web1 ~]# vim ty3.sh

#!/bin/bash

for ((i=1;i>-10;i--))

do

        echo $i

done

[root@web1 ~]# sh ty3.sh

1

0

-1

-2

-3

-4

-5

-6

-7

-8

-9

实验4.简单体验for do done语句

[root@web1 ~]# vim ty1.sh

#!/bin/bash

for NAME  in tom jack westos

do

        echo this is $NAME

done

[root@web1 ~]# sh ty1.sh

this is tom

this is jack

this is westos

.一些简单的脚本

 

##实验1.##

十秒倒计时

大神作品

[root@web1 ~]# vim 已疯十秒.sh

#!/bin/bash

for ((SEC=10;SEC>0;SEC--)) ##SEC初值为10,做SEC--(递减),范围为SEC>0,SEC减到0,则自动终止运算

do

echo -ne "After ${SEC}s is red " ##-ne e支持反斜杠转义 ,n不换行

echo -ne "\r    \r" ##覆盖之前的执行结果

sleep 1 ##每隔一秒,显示新的命令执行结果

done

 

[root@web1 ~]# sh 已疯十秒.sh

After 9s is red

[root@web1 ~]# ##执行完会自动退出

##实验2.##

一分十秒倒计时

大神作品(C语言代码)

[root@web1 ~]# vim 一分十秒.sh

#!/bin/bash

for((i=1;i>=0;i--));do

        if [ $i -ne 1 ];then

                let j=59

        else

                let j=10

        fi

        for((;j>=0;j--));do

                echo -ne "${i}min ${j}sec"

                sleep 1

                echo -ne "\r    \r"

        done

done

echo -e "bone!"   ##转义到bone

执行结果

[root@web1 ~]# sh 一分十秒.sh

0min 59sec

[root@web1 ~]# sh 一分十秒.sh

bone!0secc

老师作品(liunx代码)

#!/bin/bash

M=1

for ((SEC=10;SEC>=0;SEC--))

do

echo -ne "After 0${M}:${SEC}s 李老师会疯"

sleep 1

echo -ne "\r    \r"

 

        while [ "$SEC" -le "0" -a "$M" -gt "0" ]

        do

        echo -ne "After ${M}:${SEC}s 李老师会疯"

        echo -ne "\r    \r"

        ((M--))

        SEC=60

        done

 

done

[root@web1 ~]# sh 已疯十秒.sh

After 00:44s 李老师会疯

 

 

##实验3.##

ping15-23 看哪台可以ping通 哪些ping不通

大神作品1

[root@web1 ~]# vim ty4.sh

#!/bin/bash

for ((i=15;i<=23;i++))

do

        ping -c 1 172.25.254.$i &> /dev/null

        if [[ $? -eq 0 ]]

        then

                echo -e ‘\e[1;32m‘ "172.25.254.${i} is up" ‘\e[1;0m‘

        else

                echo -e ‘\e[1;41m‘ "172.25.254.${i} is down" ‘\e[1;0m‘

        fi

done

[root@web1 ~]# sh ty4.sh

 172.25.254.15 is down

 172.25.254.16 is down

 172.25.254.17 is down

 172.25.254.18 is down

 172.25.254.19 is down

 172.25.254.20 is up

 172.25.254.21 is up

 172.25.254.22 is down

 172.25.254.23 is down

大神作品2

[root@web1 ~]# vim ty5.sh

#!/bin/bash

for NUM in {15..23}

do

        ping -cl -wl 172.25.254.$NUM &> /dev/null

        while

                [ "$?" -eq "0" ]

        do

                echo 172.25.254.$NUM is up

        break

        done

        echo 172.25.254.$NUM is down

done

~                 

[root@web1 ~]# sh ty5.sh

172.25.254.15 is down

172.25.254.16 is down

172.25.254.17 is down

172.25.254.18 is down

172.25.254.19 is down

172.25.254.20 is down

172.25.254.21 is down

172.25.254.22 is down

172.25.254.23 is down

 

老师作品

[root@web1 ~]# vim ty6.sh

#!/bin/bash

for NUM in {15..23}

do

ping -cl -wl 172.25.254.$NUM &> /dev/null && echo 172.25.254.$NUM is up || echo

172.25.254.$NUM is down

done

 

[root@web1 ~]# sh ty6.sh

172.25.254.15 is down

172.25.254.16 is down

172.25.254.17 is down

172.25.254.18 is down

172.25.254.19 is down

172.25.254.20 is down

172.25.254.21 is down

172.25.254.22 is down

172.25.254.23 is down

 

实验4.

数据库相关实验

[root@web1 ~]# systemctl start mariadb ##开启mariadb服务

[root@web1 ~]# mysql -uroot -p123 -e "show databases;" ##查看已有数据库

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| saozhu             |

| ultrax             |

+--------------------+

 

[root@web1 ~]# mysql -uroot -p123 -Ne "show databases;" ##去掉标题

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| saozhu             |

| ultrax             |

+--------------------+

 

[root@web1 ~]# mysql -uroot -p123 -e "show databases;" -NE   ##以行的形式显示数据库列表

*************************** 1. row ***************************

information_schema

*************************** 2. row ***************************

mysql

*************************** 3. row ***************************

performance_schema

*************************** 4. row ***************************

saozhu

*************************** 5. row ***************************

ultrax

 

 

[root@web1 ~]# mysql -uroot -p123 -e "show databases;" -NE | grep ^\* -v

information_schema

mysql

performance_schema

saozhu

ultrax

 

 

 

[root@web1 ~]# mysql -uroot -p123 -e "show databases;" -NE | grep -E "^\*|schema$" -v

mysql

saozhu

ultrax

 

脚本

[root@web1 ~]# vim 拉闸.sh

#!/bin/bash

 

for x in $(mysql -uroot -p123 -e "show databases;"      -NE | grep -E "^\*|schema$" -v)

do

        mysqldump -uroot -p123 $x > /mnt/$x-`date`.dump

done

 

[root@web1 ~]# sh 拉闸.sh

mysql

saozhu

ultrax

 

实验5.

几个符号的作用演示体验

[root@web1 ~]# vim 拉闸1.sh

#!/bin/bash

echo $1 ##显示输入的第一个内容

echo $2

echo $3

echo $4

echo $5

echo $6

echo $* ##显示输入的所有内容

echo $# ##统计输入的内容的个数

 

**添加:**

echo $@ ##echo $@和echo $*的作用是一样哒

测试:

[root@web1 ~]# sh 拉闸1.sh ##此时未输入任何内容所以没有任何显示,输入内容的个数为空

 

 

 

 

 

 

[root@web1 ~]# sh 拉闸1.sh wqd ##此时输入wqd

wqd ##echo $1显示了输入的第一个内容,为wqd

 

 

 

 

 

wqd ##输入的所有内容为wqd

1 ##输入内容的个数为1

[root@web1 ~]# sh 拉闸1.sh wqd edwqeqwr qwe ##此时输入wqd,edwqeqwr,qwe

wqd ##echo $1显示了输入的第一个内容,为wqd

edwqeqwr ##echo $2显示了输入的第二个内容,为edwqeqwr

qwe ##echo $3显示了输入的第三个内容,为qwe

 

 

 

wqd edwqeqwr qwe ##输入的所有内容为wqd,edwqeqwr

3 ##输入内容的个数为3

 

实验6.

只显示当前主机ip地址

[root@web1 ~]# vim ty9.sh

#!/bin/bash

ifconfig eth0 | grep inet | grep inet6 -v | cut -d " " -f 10

 

[root@web1 ~]# sh ty9.sh

172.25.254.120

 

[root@web1 ~]# vim ty10.sh

#!/bin/bash

ping -c1 -w1 $@ &> /dev/null && echo 172.25.254.$NUM is up || echo 172.25.254.

      此处是1

$NUM is down

[root@web1 ~]# sh ty10.sh 172.25.254.20

172.25.254. is up

[root@web1 ~]# sh ty10.sh 172.25.254.18

172.25.254. is up

[root@web1 ~]# sh ty10.sh 172.25.254.19

172.25.254. is down

实验7.

 

[root@web1 ~]# vim ty11.sh

#!/bin/bash

read -p "Please input a interface:" ETH

ifconfig $ETH | grep inet | grep inet6 -v | cut -d " " -f 10

 

[root@web1 ~]# sh ty11.sh

Please input a interface:eth0

172.25.254.120

[root@web1 ~]# sh ty11.sh

Please input a interface:eth1

eth1: error fetching interface information: Device not found

实验8.

建立用户设置密码

[root@web1 ~]# vim ty12.sh

#!/bin/bash

read -p "Please input you want create username:" NAME

read -p "Please input ${NAME}‘s password:" -s PASS

useradd $NAME

echo $PASS | passwd --stdin $NAME &> /dev/null && (

        echo "created $NAME and seted it password" ) ||

        echo error

 

[root@web1 ~]# sh ty12.sh

Please input you want create username:yz

Please input yz‘s password:created yz and seted it password

实验9.

输入ip显示主机是否开启,不输入报错

[root@web1 ~]# vim ty13.sh

#!/bin/bash

[ -n "$*" ] && (

ping -c1 -w1 $* &> /dev/null && echo $* is up || echo $* is down

)||(

echo please give me a ip address

)

[root@web1 ~]# sh ty13.sh ##此时未输入ip,报错

please give me a ip address

[root@web1 ~]# sh ty13.sh 172.25.254.20 ##输入ip

172.25.254.20 is up

[root@web1 ~]# sh ty13.sh 172.25.254.19

172.25.254.19 is down

[root@web1 ~]# sh ty13.sh 172.25.254.120

172.25.254.120 is up

实验10.

输入一个数,看它是否在1-10之内,在输出yes,不在输出no

[root@web1 ~]# vim ty14.sh

[root@web1 ~]# cat ty14.sh

#!/bin/bash

read -p "please input a number:" NUM

if

[ "$NUM" -ge "0" -a "$NUM" -le "10" ]

then

echo yes

else

echo no

fi

[root@web1 ~]# sh ty14.sh

please input a number:10

yes

[root@web1 ~]# sh ty14.sh

please input a number:200

no

实验11.

输入一个文件,看它是否存在,如果存在显示它的文件类型

[root@web1 ~]# vim ty15.sh

#!/bin/bash

if

[ -e "$1" ]

then

[ -f "$1" -a ! -L "$1" ] && echo $1 is a file

[ -b "$1" ] && echo $1 is a block

[ -c "$1" ] && echo $1 is a count

[ -d "$1" ] && echo $1 is a directory

[ -L "$1" ] && echo $1 is a lik

else

[ -n "$1" ] && echo "please input give me a file" || echo $1 is not exist

fi

 

[root@web1 ~]# sh ty15.sh  /var/www/html/index.html

/var/www/html/index.html is a file

[root@web1 ~]# sh ty15.sh  /var/www/html/cgi

/var/www/html/cgi is a directory

补充:

-ef 查看两个文件节点号是否一致

-nt 比较哪个文件的时间戳更新一些

-ot 比较哪个文件的时间戳更旧一些

本文出自 “12288655” 博客,谢绝转载!

shell