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

相关推荐

  • test

    test

    Linux干货 2017-02-14
  • sed的基本用法详解

    在Linux的世界中,有着一个文本三剑客的称呼,它们分别代表grep(文本过滤),sed(流编辑器),awk(gawk)(报告生成器)。 它们是强大的文本处理工具,了解并掌握它们,可以让你对文本的处理更加从容和轻松。 今天我们主要是围绕sed来进行分析。 一、初识sed sed:Stream Editor 从名字上也可以直观的了解到它是一个流编辑工具。何为流…

    Linux干货 2015-06-08
  • Linux 的发展史

    前言 l  免费源码开放 l  安全性高,漏洞修补快 l  多任务、多使用者 l  多平台支持 l  设备要求低,不耗资源 ……      看到这一系列的优点,在IT人的脑海里只会浮出一个名字Linux. 如果还不够直观的话,有这么一个数据, 显示前500系统中的485…

    Linux干货 2016-10-14
  • 压缩打包工具

    linux系统常见的压缩命令:compress、gzip、zcat、bzip2、xz、zip 打包命令:tar、cpio compress 语法:compress  [-dfvcVr]  [-b maxbits]  [file …]        …

    2017-08-12
  • 马哥教育网络班N22期+第2周课程练习

    马哥教育网络班N22期+第2周课程练习 1 linux上的常用文件管理类命令 1.1 常用文件查看命令 MORE命令 作用:分屏显示查看文件内容 用法:more file 查看翻页方式: B键向上 一页 空格向下一页 enter键一行一行翻阅 翻到最后一行自动退出 LESS命令 作用:分屏显示查看文件内容 用法:less file 查看方式:less命令与查…

    Linux干货 2016-08-29
  • sed– 用于筛选和转换文本的流编辑器

    sed 用于筛选和转换文本的流编辑器命令格式:sed [OPTION] {script} file选项       -n, –quiet, –silent 抑制模式空间的自动打印  echo -e “abc\ndef” | sed ‘p’ #输出 abc # abc # def # d…

    Linux干货 2017-08-15

评论列表(1条)

  • renjin
    renjin 2017-04-21 11:11

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