"#!path"告诉系统path所指的程序为用来解释此脚本文件的Shell程序: 如#!/bin/sh, #!/bin/bash

Shell Script的后缀名为.sh; echo命令用于向窗口打印输出文本, 类似于python里面的print.

  1. #!/bin/bash
  2. echo "Hello World" # 打印输出"Hello World"

Shell变量

1) 变量名称的首字符必须为字母(a-z/A-Z),里面可以带下划线; 2) 不能使用bash里面的关键词; 3) 赋值语句的=两边不能有空格.

使用一个定义了的变量, 要在变量的前面加上美元符号$.

  1. name="Zhao" # 等号两边不能用任何空格
  2. echo $name # Zhao
  3. echo "I am ${name}HAHA" # I am ZhaoHAHA

Shell批处理

下面的语句可以将./test文件夹中所有的文件名循环出来, 也可以用`ls ./test/*.jpg`--这样只会将test文件夹中的.jpg图像的路径打印出来, 如: ./test/000010.jpg, 其他后缀名的文件不会打印.

  1. #!/bin/bash
  2. for file in `ls ./test` # 注意这里用的是后引号``
  3. do
  4. echo $file
  5. done
  6. # ouput
  7. .jpg
  8. .jpg
  9. .jpg
  10. .jpg
  11. .jpg

将文件夹Images里面的以Pos开头的图像都复制到文件夹pos里面, 不使用for循环:

  1. cp ./Images/Pos* ./pos/

Shell 单引号 vs 双引号 vs 后引号

  1. #!/bin/bash
  2. num=
  3. str=This is a string # is: 未找到命令
  4. str='This is a string' # 可以
  5. echo $num #
  6. echo '$num' # $num
  7. echo "$num" #

Shell中的空格, 角色比较特殊, 它是一个很典型的分隔符, 单引号和双引号的区别是: 单引号将剥夺其中所有字符的特殊含义, 比如上面程序第6行的echo '$num'; 而双引号中, '$'(参数替换)和'``'(命令替换)的含义将不会被剥夺. 两者的区别就是一个剥夺, 而一个不剥夺. 显然, 无论是用单引号还是用双引号来引住This is a string, 都可以将空格这个分隔符的含义剥夺掉.

expr Expression: expr命令读入Expression参数,计算其值,然后将结果写入到标准输出, Expression可以为:

1) match string1 string2  #

2) length string1  # 输出string1的长度

3) index string1 string2  # 返回string1中包含string2中任意字符的第一个位置索引

4) substr string1 StartPosition Length # 返回一个以StartPosition的字符开始在string1中的字符串,而且是长度为Length的字符串

此命令的一些返回值有特殊含义: --Expression参数运算值既不为空也不为0; --Expression参数计算值或为空或为0; --Expression参数无效; >2--发生了错误.

这个命令一般用于整数值计算, 但也可以用于字符串操作;

作用1: 数学运算器(格式: expr argment operator argment, 注意, 运算符的两边一定要有空格分隔符)

  1. $ expr + # +两边没有加空格
  2. +
  3. $ expr + # +两边必须有空格
  4.  
  5. $ expr *
  6. expr: 语法错误 # 使用乘号的时候,注意用\转义. 不然会报错
  7. $ expr \*
  8.  
  9. $expr /

作用2: 增量计数: expr可以在循环中用于增量计算, Shell里面的普通运算竟然也需要expr的协助.

  1. root@:/# LOOP=
  2. root@:/# echo $LOOP
  3.  
  4. root@:/# LOOP=`expr $LOOP + `
  5. root@:/# echo $LOOP

总结: Shell里面的运算还挺抽象麻烦的, 必须借助于expr吗?

  1. $ a=
  2. $ echo $a
  3.  
  4. $ a=$a+
  5. $ echo $a
  6. + # 这是啥
  7. $ a=`expr $a + ` # 每个空格都要慎重
  8. $ echo $a

readonly: 声明只读变量,相当于C++里面的const变量,其值不可修改

  1. $ a=
  2. $ readonly a # 方式1
  3. $ a=
  4. bash: a: readonly variable
  5. $ readonly b= # 方式2
  6. $ b=
  7. bash: b: readonly variable
  8. $ readonly c # 这种形式就不行了
  9. $ c=
  10. bash: c: readonly variable

unset: 删除变量(相当于MATLAB里面的clear,对变量进行删除, 在MATLAB中, 有时某个变量占用空间较大时, 不用的时候我就在程序中将其删除)

  1. $ a=
  2. $ echo $a
  3.  
  4. $ unset a
  5. $ echo $a # 无任何输出

参考文献:

[1] Shell教程: http://www.runoob.com/linux/linux-shell.html

[2] Linux中expr命令: http://blog.csdn.net/guhong5153/article/details/6542995

Shell编程学习1--基础了解的更多相关文章

  1. Linux 下shell 编程学习脚手架

    linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...

  2. (C#)Windows Shell 编程系列1 - 基础,浏览一个文件夹

    原文 (C#)Windows Shell 编程系列1 - 基础,浏览一个文件夹 (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) Windows Shell 编程,即 Windows ...

  3. shell编程学习之使用jq对json数据进行提取

    shell编程学习之使用jq对json提取 jq命令允许直接在命令行下对JSON进行操作,包括分片.过滤.转换等 ,jq是用C编写,没有运行时依赖,所以几乎可以运行在任何系统上.预编译的二进制文件可以 ...

  4. Shell高级编程学习笔记(基础篇)

    目录 1.shell脚本的执行方法  2.shell的变量类型  3.shell特殊变量 4.变量子串的常用操作  5.批量修改文件名实践   6.变量替换 7.在shell中计算字符串长度的方法  ...

  5. Shell编程学习之Shell编程基础(一)

    这篇随笔将要介绍关于Shell编程的基本知识,这些将会在假设你已经熟悉了Linux系统和命令行的基本知识. 构建基本脚本 你应该了解或熟悉使用Shell命令行了,但是只是使用Shell命令行的命令,有 ...

  6. Linux Shell编程学习笔记——目录(附笔记资源下载)

    LinuxShell编程学习笔记目录附笔记资源下载 目录(?)[-] 写在前面 第一部分 Shell基础编程 第二部分 Linux Shell高级编程技巧 资源下载 写在前面 最近花了些时间学习She ...

  7. shell编程学习笔记(一):编写我的第一段代码

    目前在学习Shell编程,我会把我的学习笔记记录在这里.大神可以直接略过~ 嗯,第一段代码,肯定是要输出Hello World了~ 以下蓝色字体的内容为linux命令,红色字体的内容为输出的内容: # ...

  8. shell编程学习笔记之sed编辑器

    在shell编程中,大多数处理的都是文本文件.对文本文件进行处理除了使用交互式文本编辑器(vi[m],gedit......)也可以使用另外一类:流编辑器. 流编辑器:使用预定义的编辑规则来对文本进行 ...

  9. shell编程学习1

    1.shell是操作系统的终端命令行 (1)shell可以理解为软件系统提供给用户操作的命令行界面,可以说它是人机交互的一种方式.    (2)我们可以使用shell和操作系统.uboot等软件系统进 ...

  10. shell编程学习笔记【原创】

    本文为本人学习笔记,如有转载请注明出处,谢谢 一.Bourne Shell 有如下四种变量: 用户自定义变量 位置变量,即命令行参数 预定义变量 环境变量 二.位置变量 $ 与键入的命令行一样,包含脚 ...

随机推荐

  1. Solr7.2的安装与使用

    单机安装Solr服务: https://www.cnblogs.com/LUA123/p/7906774.html extend: install_solr_service.sh 参数说明: 安装脚本 ...

  2. js字符串替换(时间转换)

    转: js中字符串全部替换 废话不多说,直接发结果 在js中字符串全部替换可以用以下方法: str.replace(/需要替换的字符串/g,"新字符串") 比如: "yy ...

  3. mac python2.7.10 升级到 3.6

    第一步: 下载当前最新版本 Python3.6,下载地址:https://www.python.org/downloads/ 第二步: 安装下载好的包,安装完成后的目录如下: /Library/Fra ...

  4. Hadoop基础-Protocol Buffers串行化与反串行化

    Hadoop基础-Protocol Buffers串行化与反串行化 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们之前学习过很多种序列化文件格式,比如python中的pickl ...

  5. 转:AutoLayout中的Content Hugging 和 Content Compression Resistance

    OS6中引入了AutoLayout,极大的方便了UI元素的布局,现在已经过去一年了,并且大部分设备的系统也已经升级到了iOS6,是时候要使用此项技术了. 在AutoLayout的学习中有两个概念官方文 ...

  6. 科学计算三维可视化---TVTK管线与数据加载(可视化管线和图像管线了解)

    一:TVTK的管线 使用管线技术将TVTK中各个对象穿连起来,几乎所有渲染引擎都会提到管线技术 在TVTK中,每个对象只需要实现相对简单的任务,整个管线则能根据用户的需求,实现复杂的数据可视化处理. ...

  7. ip地址、子网掩码、DNS的关系与区别

    首先ip地址可能表示内网或者外网地址: 内网也就是局域网,最直观的就是像网吧,公司内部的电脑用交换机,HUB,路由连起来的.再通过光钎.猫接入INTERNET的. 外网就像你家里的一台电脑.用猫拨号上 ...

  8. Dialog插件artDialog

    经本人测试,发现没有layer好用,因为artDialog不能拖拽.不过除了拖拽,其他还蛮简洁的,在自定义上的灵活性也还可以.下面是我自己写的测试demo. <!DOCTYPE html> ...

  9. Web API: Security: Authentication and Authority

    原文地址: http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-ap ...

  10. spring-mvc Mybatis插件打印SQL

    代码: package com.chainup.exchange.service.adapter; import com.chainup.exchange.service.impl.AccountSe ...