shell脚本编程基础

变量的种类

——–shell—–shell                      —————-

                                              |

                  ———–bash shell—–|

 

 变量:

         1 环境变量 对当前shell及系统上的其他shell全部生效

         2 仅对当前的shell环境生效

         3 仅对当前shell的某一段生效(函数)

 

 

         shell只会继承环境变量
并不会继承父shell中的变量

 

   .  或者 source  /etc/profile  只在当前的shell环境中执行,一般用来校对环境变量

 

变量的赋值:

     “” 弱引用   会把双引号里面的变量替换

     ”   强引用   不会把引号里面的变量进行替换

      “把反引号里面的命令执行结果赋值给变量

     
HZ=$SH 
用变量赋值变量

定义一个环境变量:

                  export 

                  declare -x

declare -x  环境变量

         
-r 
只读变量

         
-i 
定义数值类型(整形)

算术运算

    (1) let num=算术表达式  let r=9+9

    (2) var=$[算术表达式]    r=$[9+9]

    (3) var=$((算术表达式))  r=$((9+9))

    (4) expr 8 +
3
(要有空格)

   5declare -i r=9+9

   6bc

         echo
{1..100} | tr ” ” “+” | bc

         5050

   7 +=,  i+=3等于i=i+3

   8 -=,  i-=3等于i=i-3

   9*=,  i*=3等于i=i*3

   10 /=,

   11%=

  

    12i++  先执行 执行完加1 (用的比较多)

    13++i  先加1,再执行

例子:

[root@Centos7 script]# a=10

[root@Centos7 script]# b=10

[root@Centos7 script]# let c=a++

[root@Centos7 script]# echo $c

10

[root@Centos7 script]# echo $a

11

[root@Centos7 script]# let d=++b

[root@Centos7 script]# echo $d

11

[root@Centos7 script]# echo $b

11

[root@Centos7 script]#

 

字体颜色:30——37

        echo -e
“\033[30m
黑色字 \033[0m” 

        echo -e
“\033[31m
红色字 \033[0m” 

        echo -e
“\033[32m
绿色字 \033[0m” 

        echo -e “\033[33m黄色字 \033[0m” 

        echo -e “\033[34m蓝色字 \033[0m” 

        echo -e “\033[35m紫色字 \033[0m” 

        echo -e “\033[36m天蓝字 \033[0m” 

        echo -e “\033[37m白色字 \033[0m”

 

字体背景颜色40—–47

       echo -e
“\033[40;37m
黑底白字 \033[0m” 

       echo -e
“\033[41;37m
红底白字 \033[0m” 

       echo -e
“\033[42;37m
绿底白字 \033[0m” 

       echo -e
“\033[43;37m
黄底白字 \033[0m” 

       echo -e
“\033[44;37m
蓝底白字 \033[0m” 

       echo -e
“\033[45;37m
紫底白字 \033[0m” 

       echo -e
“\033[46;37m
天蓝底白字 \033[0m” 

       echo -e
“\033[47;30m
白底黑字 \033[0m”

逻辑运算

true 1

false 0

 

1 1 = 1

1 0 = 0

0 1 = 0

0 0 = 0

 

1 1 = 1

1 0 = 1

0 1 = 1

0 0 = 0

1 = 0

0 = 1

&&

||

1 && 1 = 1

1 && 0 = 0

1 || 1 = 1

1 || 0 = 1

 

短路预算:

命令1 && 命令命令1 成功执行 则执行命令2

                命令1 执行失败
则不会执行命令2

 

命令1 || 命令命令1成功执行,则命令2不执行

                命令1执行失败,则命令2执行

 

 命令1
&&
命令2 || 命令3

 如果命令1 成功执行 则执行命令2 且命令3不会执行

 如果命令1 执行失败 那么命令2就不会执行,则命令3执行

 

 如果   命令1 成功

        命令2

    否则  命令3

退出状态

   使用$?  0代表前面一个命令执行成功

          0 代表前面一个命令执行失败

          可以在脚本里面自定义退出状态

 

   根据退出状态来判断一个命令的执行成功与否

 

 

  exit [n]:自定义退出状态码

  注意:脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字

  注意:如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码

例子:

grep -q “root” /etc/passwd && echo
“user exists” || echo “user not exists”

user exists

grep -q “rooooot” /etc/passwd &&
echo “user exists” || echo “user not exists”

user not exists

[root@Centos7 ~]# ls -d /u &>/dev/null  && echo “dic exists” ||
echo “dic not  exists”

dic not  exists

 

测试条件

  test  测试条件

  [ 测试条件 ]

  [[ 测试条件 ]] 条件测试的前后要加上空格

                 生产环境建议使用两个中括号

 

数值测试:

    -gt: 是否大于

    -ge: 是否大于等于

    -eq: 是否等于

    -ne: 是否不等于

    -lt: 是否小于

    -le: 是否小于等于

 

   [[ 6 > 2
]] && echo “OK”

 

字符串测试

   ==

   >

   <

   !=

   =~ 左边的字符串是否包含右边指定的字符串

   -z 测试字符串是否为空

   -n 测试字符串是否不为空

例子:

[root@Centos7 script]# [ 1 -gt 2 ] && echo
“OK”

[root@Centos7 script]# [ 3 -gt 2 ] && echo
“OK”

OK

[root@Centos7 script]#

[root@Centos7 script]# [ 3 -ge 2 ] && echo
“OK”

OK

[root@Centos7 script]# [ 2 -ge 2 ] && echo
“OK”

OK

[root@Centos7 script]# [ 2 > 2 ] && echo
“OK”

OK

[root@Centos7 script]#

[root@Centos7 script]# [ 1 > 2 ] && echo
“OK”

OK

[root@Centos7 script]# [ 1 \> 2 ] && echo
“OK”

[root@Centos7 script]#

[root@Centos7 script]# [ 5 \> 2 ] && echo
“OK”

OK

[root@Centos7 script]# [ 6 \> 2 ] && echo
“OK”

OK

文件测试:

-d 判断是否存在 且是否是目录

-f 判断是否存在 且是否是普通文件

-r FILE:是否存在且可读

-w FILE: 是否存在且可写

-x FILE: 是否存在且可执行

判断当前用户对文件有读写执行的权限(root

read -p 指定提示内容

     -t 指定超时时间

产环境在写脚本的时候

 一般前面会先读一下环境变量配置文件

 . /etc/profile

 java php

 测试环境 生产环境1 生产环境2 生产环境3

  php       php        php     
php

 172.16.0.1  192.168.1.1  
192.168.1.100

  如果代码里面包含一些关于数据库的配置 比如MySQL Redis

  配置标准化

  定义专门的环境变量的配置文件,比如webenv.sh

  export MYSQL=1.1.1.1

  export
MUSER=mysql

  export
MPASSWD=12345

  /etc/profile里最后一行t添加

   . webenv.sh

 
PATH=$PATH:/usr/local/apache/bin

  /etc/issue 登录前提示信息

  /etc/motd 登陆后提示信息

 

字符串切片:

    egMYNAME=”liangchenye”

             substr=${MYNAME:4}

        2  ${变量:位置起点:长度}

            egMYNAME=”liangchenye”

             substr2=${MYNAME:4:6}

 

给某个不存在的变量一个默认值

 

${待测变量:=默认值}

若变量不存在或其值为空,则符合判断,传回默认值

unset myname

echo ${myname:=”fuerkang”}

 

测试变量是否为空或者不存在,提示错误信息

${待测变量:?提示信息}

echo ${name:?”sorry no name”}

例子:

 写一脚本,接受一个用户名为参数;

 (1) 如果用户的id号为0,则显示其为管理员;

 (2) 如果用户的id号大于0且小于500, 则显示其为系统用户;

 (3) 否则,则显示其为普通用户;

 

#!/bin/bash

  2

  3 USERNAME=$1

  4

  5 USERID=`id
-u ${USERNAME}`

  6 [ -z
${USERID} ] && exit 4

  7

  8 if [
${USERID} -eq 0 ];then

  9         echo “systemadmin.”

 10 elif [
${USERID} -gt 0 -a ${USERID} -lt 1000 ];then

 11         echo “system user.”

 12 else

 13     echo “common user.”

 14 fi

原创文章,作者:yaobinbin,如若转载,请注明出处:http://www.178linux.com/73496

(0)
yaobinbinyaobinbin
上一篇 2017-04-16
下一篇 2017-04-16

相关推荐

  • 文件查找

    文件查找: locate查找:     locate:     依赖于事先构建好的索引库,操作系统刚完成没有       系统自动实现(周期性任务);      &nbs…

    Linux干货 2016-08-15
  • 马哥教育网络第21期-第八周课程练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。   网桥从一个局域网接收MAC帧,拆封、校对、校验之后,按另一个局域网的格式重新组装,发往它的物理层。由于网桥是链路层设备,因此不处理数据链路层以上层次协议所加的报头。   集线器的主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点…

    Linux干货 2016-10-24
  • Linux运维之路-Linux基础学习二

    Linux系统的一切皆文件思想会帮助我们学习

    2017-11-18
  • 初学Linux之文件查找和压缩

    使用locate命令 ,使用find命令 ,压缩和解压缩工具

    2018-01-13
  • 模块化的php编译amp和fpm化的php编译amp;

    编译安装amp 一,编译环境前准备工作 (1) 系统环境:CentOS 6,7     CentOS 6:apr, apr-util的版本为1.3.9,不适用于httpd-2.4;     CentOS 7:apr, a…

    Linux干货 2016-10-17
  • 马哥网络教育班21期+第一周博客作业

    1、描述计算机的组成及其功能。   硬件:     CPU(运算器、控制器、一缓存(L1)、二级缓存(L2)):       运算器主要用来进行算数运算以及逻辑运算。       控制器主要是用来协调       一级缓存和二级缓存主要是用…

    Linux干货 2016-07-12

评论列表(1条)

  • renjin
    renjin 2017-04-21 11:11

    主要介绍了一些shell编程的基础用法,内容总结的非常详细,建议你把代码放入到”插入程序代码”中去,那样的话效果会好一些的!