1Shell编程
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell脚本
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
业界所说的 shell 通常都是指 shell 脚本,(java文本文件)
2 Shell环境

Shell 编程跟 java、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。(Linux系统中自带编译器)

.java   --->javac   xx.java  java  

Linux 的 Shell 编程解析器种类众多,常见的有:

l Bourne Shell(/usr/bin/sh或/bin/sh)

l Bourne Again Shell(/bin/bash)

l C Shell(/usr/bin/csh)

……

本教程关注的是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell脚本解析器。

(必须有/bin/bash:不然无法编写shell,想无jvm无法编写 java程序一样)

在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash。

第一个shell脚本

Linux中的shell脚本 ----》文件      xx.sh---->shell脚本

3.1 编写Shell脚本

    打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),

     扩展名并不影响脚本执行,见名知意就好,如果你用 php 写 shell 脚本,扩展名就用 php 好了。

    输入一些代码,第一行一般是这样:

        #!/bin/bash
        echo "Hello World !"

      

      

    

    #! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

    echo 命令用于向窗口输出文本。

3.2 运行 Shell 脚本

   3.2.1 作为可执行程序   ./text.sh

     将上面的代码保存为 test.sh,并 cd 到相应目录:

           chmod +x ./test.sh  #使脚本具有执行权限

            ./test.sh  #执行脚本

       注意,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,

      直接写 test.sh,linux 系统会去 系统默认PATH 里寻找有没有叫 test.sh 的,,

      你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。

    3.2.2 作为解释器参数   /bin/bash/text.sh

          这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:

            /bin/sh/bash test.sh

                    /bin/php test.php

           这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。

Shell变量

    显示当前shell中所有变量:set命令显示出系统所有的变量(JAVA_HOME)

    定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:

          your_name="runoob.com"

         $JAVA_HOEM:path是在引用变量

           

    注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:

        • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。  
        • 中间不能有空格,可以使用下划线(_)。
        • 不能使用标点符号。

    有效的 Shell 变量名示例如下:

        RUNOOB

        LD_LIBRARY_PATH

         _var

        var2

      无效的变量命名:包含了特殊字符

          ?var=123

           user*name=runoob

      除了显式地直接赋值,还可以用语句给变量赋值,如:

          for file in `ls /etc` 

          Do

          Echo $file

          done

          或

          for file in $(ls /etc)

                 

      以上语句将 /etc 下目录的文件名循环出来,赋值给变量 file

4.1 使用变量

    使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

        your_name="qinjx"

        echo $your_name

        echo ${your_name}

    变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:

        for skill in Ada Coffe Action Java; do

          echo "I am good at ${skill}Script"

        done

    如果不给skill变量加花括号,写成echo "I am good at $skillScript",解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。

    推荐给所有变量加上花括号,这是个好的编程习惯。

    已定义的变量,可以被重新定义,如: 相当于java中给变量从新赋值

        your_name="tom"

        echo $your_name

        your_name="alibaba"

        echo $your_name

   这样写是合法的,但注意,第二次赋值的时候不能写$your_name="alibaba",使用变量的时候才加美元符($)。

4.2 只读变量

    使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

    下面的例子尝试更改只读变量,结果报错:

        #!/bin/bash

        myUrl="http://www.google.com"

        readonly myUrl

         myUrl="http://www.runoob.com"

    运行脚本,结果如下:

       /bin/sh: NAME: This variable is read only.

4.3 删除变量

    使用 unset 命令可以删除变量。语法:

        unset variable_name

    变量被删除后不能再次使用。unset 命令不能删除只读变量。

    实例

        #!/bin/sh

        myUrl="http://www.runoob.com"

        unset myUrl

        echo $myUrl

       以上实例执行将没有任何输出。

4.4 变量类型

    运行shell时,会同时存在三种变量:

        • 1) 局部变量局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。类似于java中的私有化
        • 2) 环境变量所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。(所有的shell脚本启动的时候都能访问得到环境变量)
        • 3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
        • export 变量名 可把变量提升为全局环境变量,可供其他shell程序使用

4.5 Shell字符串

      字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别跟PHP类似。

4.5.1 单引号

      str='this is a string'

      单引号字符串的限制:

          •  单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;

            (举例:echo ‘$str’:无效引用)

          • 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。

4.5.2 双引号

          your_name='qinjx'

          str="Hello, I know you are \"$your_name\"! \n"

    双引号的优点:

        • 双引号里可以有变量
        • 双引号里可以出现转义字符 \” ”\

4.5.3 拼接字符串

    your_name="qinjx"

    greeting="hello, "$your_name" !"

    greeting_1="hello, ${your_name} !"

    echo $greeting $greeting_1

4.5.4 获取字符串长度

    string="abcd"

    echo ${#string} #输出 4

4.5.5 提取子字符串

    以下实例从字符串第 2 个字符开始截取 4 个字符:

      string="runoob is a great site"

      echo ${string:1:4} # 输出 unoo

4.5.6 查找子字符串

    查找字符 "is" 的位置:

        string="runoob is a great company"

        echo `expr index "$string" is`  # 输出 8

    注意: 以上脚本中 ` 是反引号,而不是单引号 ',不要看错了哦。     

      反引号:先执行命令 类似于遍历

        listc=`ls -la`     #将Linux命令赋予listc,listc的值就是该命令的执行结果

        listc=$(ls -la)  #等价于反引号

     反引号的作用就是将反引号内的Linux命令先执行,然后将执行结果赋予变量。

        需要记住单引号和反引号之间的区别。单引号把Linux命令视为字符集合。反引号会强迫执行Linux命令。

 

 

 

Shell脚本1的更多相关文章

  1. 第一个shell脚本

    打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好. #!/bin/bash echo "Hello World !" &quo ...

  2. 使用C#给Linux写Shell脚本

    在这个逼格决定人格,鄙视链盛行的年头,尤其是咱们IT界,请问您今天鄙视与被鄙视的次数分别是多少?如果手中没有一点压箱的本事,那就只有看的份了.今天我们也要提升下自己的格调,学习些脑洞大开的东西,学完之 ...

  3. shell脚本规划化模板

    shell脚本规划化模板 Linux运维过程中,shell脚本是不可缺少的工具,但是每个运维人员编程的习惯都不一样,很多时候就是实现某个功能,写出来的脚本都是烂七八糟的.脚本必须规范化,应该从以后几个 ...

  4. Shell脚本编程30分钟入门

    Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...

  5. Linux Shell脚本逻辑操作符简介

    在写程序时,会用到条件判断,测试条件是否成立.很多时候,判断条件是多个的,这个时候需要用到逻辑操作符.shell脚本中常用的有哪些逻辑操作符呢? 1.逻辑与: -a 格式: conditon1 -a ...

  6. Linux shell脚本编程(三)

    Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...

  7. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

  8. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  9. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

  10. shell 脚本之循环使用 for while 详解

    任何一种编程语言中循环是比不可少的,当然 shell 脚本也少不了循环语句,包括 for 语句. while 语句.文中主要以实际用例来说明 for while 都有哪些常见的使用方法和技巧. 一.f ...

随机推荐

  1. perl语言中的.pm文件和.pl文件区别

    perl...呵呵呵 按照惯例,.pm 应该保存 Perl Module,也就是 Perl 模块.例如 Socket.pm.pl 应该保存 Perl Library,也就是 Perl 库文件.例如 p ...

  2. Excel 单元格不能设置超链接

    最近在重做系统后  新安装office后 原先的Excel中设置的超链接不能正常使用了  如果新配置的超链接也不能使用 解决方法: 步骤1:打开开始菜单,在运行里输入regedit,回车 步骤2  在 ...

  3. 对tomcat7模拟并发请求及相关配置参数的含义

    这里的并不是真正的并发请求,因为for循环是间隔10毫秒,并且线程初始化也需要时间的,到真正执行http请求的时刻是不确定的.  tomcat 的运行状态可以在webapps下的manage项目查看, ...

  4. vue与jquey

    vue与jquey jQuery是使用选择器($)选取DOM对象,对其进行赋值.取值.事件绑定等操作,其实和原生的HTML的区别只在于可以更方便的选取和操作DOM对象,而数据和界面是在一起的.比如需要 ...

  5. [ZJOI2012]灾难

    嘟嘟嘟 偶尔翻到的一道题. 50分暴力很好想,对于每一个点进行一次拓扑排序,然后每一次别memset,只清空走过的点,能拿到70分. 正解好像也挺好想,是一个叫"灭绝树"的东西. ...

  6. Oracle补丁术语介绍

    在使用Oracle的技术支持服务的时候,经常会遇到补丁相关的术语.现在对这些术语做些解释说明: Interim patch/One-off patch:是我们常说的小补丁,为了修复某(几)个Bug而发 ...

  7. 前端使用 Nginx 反向代理彻底解决跨域问题

    引入网址https://blog.csdn.net/larger5/article/details/81286324 1.请求后端数据失败 代码: <!DOCTYPE html> < ...

  8. LeetCode练习2 两数相加

    问题如下: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来 ...

  9. VS2015中配置Eigen

    Eigen非常方便矩阵操作,当然它的功能不止如此.矩阵操作在算法研究过程中,非常重要,例如在图像处理中二维高斯拟合求取光斑中心时使用Eigen提供的矩阵算法,差不多十来行代码即可实现. 1)下载Eig ...

  10. day23 Pythonpython 本文re模块

    re模块用于对python的正则表达式的操作. 字符: . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配 ...