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

相关推荐

  • centos启动流程

    加电自检 检测硬件是否存在并且能够正常运行,如cpu、内存、硬盘是否存在并能正常运行,以及外围得输入输出设备是否存在,如键盘、鼠标、显示器。 bios启动次序,按照次序查找个引导设备,启动第一个具有引导程序的设备,即为本次启动需要加载的设备。 加载boot loader bootloader安装在mbr中,linux的bootloader程序为grub和li…

    Linux干货 2017-11-14
  • nfs 共享实验

    nfs全称为:network file system    网络文件系统 在Linux里可以理解为将一个文件夹变成共享文件夹,让其他用户都可以访问。而访问的主机其本地磁盘是没有存储文件的 创建方法如下 :     准备两台机器,一台当 client  另一台当server    &nbsp…

    Linux干货 2017-06-07
  • 第三周n28

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 who | cut -d ” ” -f 1 | sort -u 2、取出最后登录到当前系统的用户的相关信息。 who | tail -1 3、取出当前系统上被用户当作其默认shell的最多的那个shell。 cat /etc/passwd | …

    Linux干货 2017-12-17
  • Samba服务

    一 服务端配置 1 安装所需软件 [root@centos7 ~]# yum install samba samba-common -y samba主要提供SMB服务所需的各项服务程序、相关的文件及其他和Samba相关的设置等 samba-common提供服务端和客户端都会用的的数据,包括主配置文件、语法检查等 2 添加Samba用户 添加smb1、smb2…

    Linux干货 2017-06-13
  • tomcat基础进阶

                        tomcat基础进阶 前言 Tomcat Architecture Tomcat Installation Tomcat…

    Linux干货 2016-04-22
  • LAMP+logzilla+sphinx+syslog-ng实现集中日志管理(第一版)[原创]

    一、前言        目前查看系统日志比较被动,遇到系统不正常或故障时才会主动去检查服务器系统日志,这样一来不能及时了解系统的运行情况,因此部署Logzilla+sphine+syslog-ng来弥补这不足。以下为安装、部署平台详细步骤。(Logzilla是什么新东西?其实前身就是php-syslog-ng,引用作者…

    Linux干货 2015-03-27

评论列表(1条)

  • renjin
    renjin 2017-04-21 11:11

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