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)
上一篇 2017-04-16 19:43
下一篇 2017-04-16 20:52

相关推荐

  • bash特性

    2018-03-11

    2018-03-11
  • 修改Linux命令终端提示符

    作业1. 设置自己的终端提示符,要求字符终端登录时:     a> 需要带颜色     b> 需要显示当前执行到了第几条命令     c> 显示当前登录终端,主机名和当前时间     这可以通…

    Linux干货 2016-10-17
  • 磁盘配额、软RAID使用、LVM管理

    一.磁盘配额的相关知识 (1)工作原理及方式         *以文件系统为单位启动         *以特定的用户或组为对象       …

    Linux干货 2016-09-06
  • C++的std::string的“读时也拷贝”技术!

    C++的std::string的读时也拷贝技术! 嘿嘿,你没有看错,我也没有写错,是读时也拷贝技术。什么?我的错,你之前听说写过时才拷贝,嗯,不错的确有这门技术,英文是Copy On Write,简写就是COW,非常’牛’!那么我们就来看看这个’牛’技术的效果吧。 我们先编写一段程序 #include <string> #include…

    Linux干货 2015-04-03
  • CentOS 7 安装 mysql-5.7.14

    在centos7上安装 路上遇过各种坑 把在centos7正确安装mysql-5.7.14分享一下 1. CentOs7 默认的数据库为MariaDB,先卸载MariaDB,否则安装mysql,引起冲突 rpm -qa mariadb rpm -e –nodeps mariadb 2. 准备好工作环境 mkdir /application&nbs…

    Linux干货 2017-05-07
  • Centos下实现多网卡绑定

    实现多网卡绑定在Centos6和Centos7可采用bonding方式,Centos7上team网络组也可实现,并且功能更强大。 Linux bonding 模块提供一种将多个网卡聚合成一块逻辑捆绑网卡的实现方法。 捆绑的网卡拥有多种模式,根据模式的特性,可实现网络负载均衡,网络冗余切换,提高网络吞吐量等功能。 大多流行Linux发行版都已装载bonding…

    Linux干货 2016-09-13

评论列表(1条)

  • renjin
    renjin 2017-04-21 11:11

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