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

相关推荐

  • lvs的四种调度类型和调度算法介绍

    lvs是linux内核级的负载均衡解决方案,作为netfilter的补充套件,其工作在INPUT hook上。 相比nginx等负载均衡解决方案的差异如下: lvs工作于内核空间,不受用户空间套接字和端口数量的限制,而且所有调度工作在内核空间完成,效率更高; nginx为七层负载均衡器,虽然通过stream模块也可以做到四层负载均衡,但是受到套接字数量限制,…

    Linux干货 2017-06-25
  • class9 bash编程基础(一)

    一、编程基础 程序:指令+ 数据 程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心,指令服务于数据 shell 程序:提供了编程能力,解释执行 程序的执行方式 计算机:运行二进制指令; 编程语言: 低级:汇编 高级: 编译:高级语言–> 编译器–> 目标代码   &n…

    Linux干货 2016-08-15
  • 系统自动化安装的实现及SELINUX的设置

    系统的自动化安装     anaconda:系统安装程序         tui:基于图形库curses的文本窗口         gui:图形窗口     装载根文件系统,并启动…

    Linux干货 2016-09-16
  • 计算机组成原理

    计算机组成原理 计算机概述 计算机的基本组成: ·         存储器:     实现记忆功能的部件用来存放计算程序及参与运算的各种数据 ·         运算器:     负责数据的算术运算和…

    Linux干货 2016-10-31
  • linux文件权限

    一、前言 在linux中,每个目录或者文件都有相对应的权限,linux通过文件属主(user),文件属组(group),其它人(order)对一个文件或者目录控制读写执行权限,当然在这些基本权限之外还有特殊权限,facl(file access control list)等。 二、文件基本权限    2.1:属主、属组、order概念 &…

    Linux干货 2015-08-17
  • 逻辑卷管理工具lvm2

    lvm2:location Volume Manage Version 2 linux支持逻辑卷的模块为dm模块                        dm模块是将一个或多个底层物理设备组织成一个逻辑设备的模块。 在CentOS中,…

    Linux干货 2016-03-27

评论列表(1条)

  • renjin
    renjin 2017-04-21 11:11

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