Shell编程(1)

Shell编程:

    编程语言:机器语言、汇编语言、高级语言

        高级语言:

            静态语言:编译型语言

            静态语言:编译型语言

                强类型(变量)

                    变量:\\变量在使用前,必须事先声明,甚至还需要初始;。

                事先转换成可以执行格式

                C、C++、JAVA、C#

            动态语言:解释型语言,on the fly

                弱类型 \\边解释边执行。

                变量:\\变量用时声明,甚至不区分类型。

                PHP、SHELL、Python、Perl

    变量:内存空间,命名

        内存:编址的存储单元

        变量类型:事先确定数据的存储格式和长度;

            字符

            数值

                整型

                浮点型

    逻辑运算:

        与:只要有一个为假,结果一定为为假

        或:只要有一个为真,结果一定为真



我是分割线

行间距太大,请求调整


Shell

    变量赋值:

        'VAR_NAME=VALUE'

    BASH变量类型:

        环境变量

        本地变量(局部变量)

        位置变量

        特殊变量

            本地变量:

                #VARNAME=VALUE':作用域整个bash进程;

            局部变量:

                # local VARNAME=VALUE:;'作用域为当前代码段

            环境变量:

                # export VARNAME=VALUE':作用域为当前shell进程及其子进程;

            位置变量

                $1,$2,…

                    . root/filetest3.sh /etc/passwd /tmp/testdir

                    $1=/etc/passwd $2=/tmp/testdir

            特殊变量:

                $?:上一个命令的执行状态返回值;

                    程序执行,可能有两类的返回值:

                        '1、程序执行结果'

                        '2、程序状态返回代码(0-255)'

                            0:正确执行

                            1-255:错误执行,1,2,127,系统预留

                    "导出"

                $#:参数的个数

                $*:参数列表

                $@:参数列表

            撤销变量:

                # unset VARNAME'

            查看shell中的变量

                # set

            查看当前shell中环境变量:

                # printenv

                # env

                # export

            》脚本在执行时会启动一个子sehll进程;

                》命令行中启动的脚本会继承当前shell环境变量;

                》系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量;

练习:写一个脚本,完成一下任务

    1、添加5各用户,user1,…,user5

    2、每个用户的密码同名,而且要求添加密码完成以后不显示passwd命令的执行结果信息;

    3、每个添加完成后,都要显示用户某某已经成功添加

练习:写一个脚本,完成一下任务

    1、使用一个变量保存一个用户名;

    2、删除此变量中的用户,且一并删除其家目录;

    3、显示"用户删除完成"类信息

条件判断:

    如果用户不存在

        添加用户,给密码并显示添加成功;

    否则

        显示如果已经存在,没有添加;

    bash中如何实现添加判断?

        添加测试类型:

            整数测试

                    '-eq:测试两个整数是否相等;比如 $A -eq $B

                '-ne:测试两个整数是否相等;不等,为真;相等,为假

                    '-gt:测试一个整数是否大于另一个数;大于,为真;否则,为假

                '-lt:测试一个整数是否大于另一个数;小于,为真;否则,为假

                    '-ge:大于或等于

                    '-le:小于或等于

                        # [ $EXPRESSION -eq 0 ] \\测试表达式的用法。

                   # [[ $EXPRESSION ]]

                        # test expression

            字符测试

                ==:测试是否相等,相等为真,不等为假

                !=:测试是否不等,不等为真,等为假

            文件测试

                -e FILE:测试文件是否存在

                -f FILE:测试文件是否为普通文件

            -d FILE:测试指定路径是否为目录

                -r FILE:测试当前用户对制定文件是否有读取权限;

                -w FILE:测试当前用户对制定文件是否有写权限;

                -x FILE:测试当前用户对制定文件是否有执行权限;


/////////////////////////////////////////////////////////////////////////////////////////////////////


shell中如何进行运算:

    A=3

    B=6

        1、let 算术运算表达式

            # let C=$A+$B

            # echo $C

        2、$[算术运算表达式]

            # C=$[$A+$B]

            # echo $C

        3、$((算术运算表达式))

            echo $(($A+$B))


    '单分支if语句

        if 判断语句; then

            语句;

            语句;

        fi

    '双分支if语句

        if 判断语句; then

            语句

            语句

        else

            语句

            语句

        fi

    '多分支if语句

        if 判断条件; then

            statement1

            …

        elif 判断条件;then

            statement2

            …

        elif 判断条件;then

            statement3

            …

        else #前面所有的条件都不满足,才执行这个

            statement4

            …

        fi

    case语句

        case VALUE in

        1)

            comd……

            ;;

        2)

            conmd…….

            ;;

        …)

            comd…….

            ;;

        esac


/////////////////////////////////////////////////////////////////////////////////////////////////////


循环:进入条件,退出条件

    for

        for 变量 in 列表; do

            循环体

        done

        如何生成列表:

            {1..100}

            `seq 起始数 步进长度 结束数`

        declare -i SUM=0

            -x:将一个变量声明为环境变量

        for循环的特殊格式:

            for ((控制变量初始化;条件判断表达式;控制变量的修正表达式));do

                循环体

            done

                控制变量初始化:仅在运行到循环代码段时执行一次

                控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算而后再做条件判断

    while

        while CONDITION; do

            循环体

        done

            CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“ true”,则执行

    一次循环;直到条件测试状态为“ false”终止循环

            因此: CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地被修正

                进入条件: CONDITION为true;

                退出条件: CONDITION为false

    until

        until CONDITION; do

            循环体

        done

        CONDITION:同上相反

            进入条件: CONDITION 为false

            退出条件: CONDITION 为true

                                                2016-08-17-15:34:57


原创文章,作者:皱 多利亚,如若转载,请注明出处:http://www.178linux.com/36815

(0)
皱 多利亚皱 多利亚
上一篇 2016-08-18 10:10
下一篇 2016-08-18 10:10

相关推荐

  • Linux用户权限管理和信息查找

    这里给大家介绍一下基本的一些用户管理的命令。       基于这些命令演示一下例题如下:      复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@localhost&nbs…

    Linux干货 2016-11-20
  • mysql or条件可以使用索引而避免全表

    在某些情况下,or条件可以避免全表扫描的。 1 .where 语句里面如果带有or条件, myisam表能用到索引, innodb不行。 1)myisam表:  CREATE TABLE IF NOT EXISTS `a` (   `id` int(1)&nb…

    Linux干货 2015-04-13
  • 加密通讯过程

    一次加密通讯的过程 1、client_hello   客户端发起请求,以明文传输请求信息,包含版本信息,加密套件候选列表,压缩算法候选列表,随机数,扩展字段等信息,相关信息如下: 支持的最高TSL协议版本version,从低到高依次 SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2,当前基本不再使用低于 TLSv1 的版本 客户端支持的加密…

    Linux干货 2017-02-07
  • shell脚本基础练习2

    1.编写一个脚本/root/bin/createuser.sh,脚本的执行语法必须是:createuser.sh -username -m password,选项与参数间可支持多空格,但不能顺序颠倒。当未指定正确的选项或参数时,以错误输出方式提示“createuser.sh -u username -m password ”后退出脚本。用…

    2017-08-12
  • N25_第一周

    计算机组成 计算机通常由硬件和软件组成1.硬件 CPU CPU通常由控制器和运算器组成。控制器:是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。运算器:是对数据进行各种算术运算和逻辑运算,即对数据进行加工处理。 存储 存储器的功能是存储程序、…

    Linux干货 2016-12-03
  • Linux文件查找命令

      Linux系统文件查找     使用linux系统难免会忘记文件所在的位置,可以使用以下命令对系统中的文件进行搜索。 locate命令:     locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。L…

    Linux干货 2016-11-28

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-19 10:14

    对脚本常见的语句语法总结的和详细,脚本学习更重要的是多看多写,作业要好好完成。