Linux基础系列:常用命令(8)_shell script

一、什么是shell script

  将OS命令堆积到可执行的文件里,由上至下的顺序执行文本里的OS命令 就是脚本了.
  再加上些智能(条件/流控)控制,就变成了智能化脚本了

二、变量命名规则

  以字母或下划线开头,剩下的部分可以是:字母、数字、下划线.

遵循下述规范:

  1.以字母开头
  2.使用中划线或者下划线做单词的连接
  3.同类型的用数字区分
  4.对于文件最好加上拓展名
    例如: sql_bak.tar.gz,log_bak.tar.bz2 

定义变量名的边界

[root@MiWiFi-R3-srv ~]# rest_mem=20
[root@MiWiFi-R3-srv ~]# echo ${rest_mem}%
20%

(()) 比较

测试操作 [] 

1   # x=1

2   # [ $x -gt 1 ]

3   # echo $? 4   0 

=    :字符是否相等

!=    :字符不相等

-eq    :判断数字是否相等

-ne    :判断数字不相等

-gt    :判断一个数字大于另一个数字

-ge    :判断一个数字大于等于另一个数字

-lt      :判断一个数字小于另外一个数字

-le      :判断一个数字小于等于另外一个数字

 

-b      :文件存在并且是一个块设备文件

-d      :文件存在并是一个目录文件

-e      :文件存在

-f       :文件存在,并且是一个普通文件

-a      :与

-o      :或

三、流程控制

if 循环     用户验证:

1 #!/bin/bash
2 read -p 'please input your name:' username
3 read -p 'please input your passwd:' passwd
4 
5 if [ $username = 'alex' -a $passwd = 'alex3417' ];then
6     echo 'login successful'
7 else     
8     echo 'login err'
9 fi

猜年龄:

 1 #!/bin/bash
 2 age=57
 3 read -p 'please input oldboy age' oldboy_age
 4 if [ $oldboy_age -gt $age ];then
 5     echo 'too older'
 6 elif [ $oldboy_age -lt $age ];then
 7     echo 'too yanger'
 8 else
 9     echo 'congratulation!'
10 fi

while循环   验证文件类型

 1 while :
 2 do
 3     read -p 'input you file: ' file
 4     if [ -z $file ];then
 5         continue
 6     else
 7         break
 8     fi
 9 done
10     if [ -b $file ]; then
11         echo "$file is block file"
12     elif [ -f $file ]; then
13         echo "$file is regular file"
14     elif [ -d $file ]; then
15         echo "$file is direvtory file"
16     else 
17         echo '$file type unkown'
18     fi

while和if循环      猜年龄(2)

 1 #!/bin/bash
 2 age=57
 3 while :
 4 do
 5     read -p 'please input oldboy age:' oldboy_age
 6     if [ -z $oldboy_age ];then
 7         echo 'age is null'
 8         continue
 9     fi
10     if [ $oldboy_age -gt $age ];then
11         echo 'too older'
12     elif [ $oldboy_age -lt $age ];then
13         echo 'too yanger'
14     else
15         echo 'congratulation!'
16         break
17     fi
18 done

for 循环  输出奇数

1 #!/bin/bash
2 num=0
3 for i in {1..10}
4 do
5     if ((i%2 == 0));then
6         continue
7     fi
8     echo '======'$i
9 done

for循环   测试局域网有效ip

1 #!/bin/bash  
2 for i in {1..20}
3 do
4     ping -c1 192.168.16.$i &> /dev/null    #-c1 只ping一次; &> /dev/null 将无用信息写入空文件
5 if [ $? -eq 0 ];then 6 echo "192.168.16.$i" 7 fi 8 done

while 、for、if嵌套循环    统计/dev下每种类型文件的数量:

 1 #!/bin/bash
 2 while :
 3 do
 4     read -p 'your dir:' dirname
 5     if [ -z $dirname ];then
 6         continue
 7     else
 8         break
 9     fi
10 done
11 for i in $(ls $dirname)
12 do
13     if [ -h $dirname/$i ];then
14         ((link_file+=1))
15     elif [ -f $dirname/$i ];then
16         ((putong_file+=1))
17     elif [ -d $dirname/$i ];then
18         ((dir_file+=1))
19     fi
20 done
21 echo "pu tong wen jian shu:$putong_file"
22 echo "mu lu wen jian shu:$dir_file"
23 echo "lian jie wen jian shu:$link_file"

两层循环    输出九九乘法表

1 #!/bin/bash
2 for i in {1..9}
3 do
4         for ((j=1;j<=i;j++))
5         do
6                 echo -n "$i*$j= $[$i*$j]  "
7         done
8         echo
9 done

登录验证完善版

 1 #!/bin/bash
 2 user='egon'
 3 passwd='123'
 4 tag=true
 5 while $tag
 6 do
 7         read -p 'please input your name:' username
 8         read -p 'please input your passwd:' pas
 9         if [[ $username = $user ]] && [[ $pas = $passwd ]];then
10                 echo 'login successful'
11                 while $tag
12                 do
13                         read -p '>> : ' cmd
14                         if [[ $cmd = 'quit' ]];then
15                                 tag=false
16                         else
17                                 $cmd
18                         fi
19 
20 
21                 done
22         else
23                 echo 'login err'
24         fi
25 done

 

posted @ 2017-06-05 15:26  hedeyong11  阅读(245)  评论(1编辑  收藏  举报