原文地址:WindowsBatch与LinuxShell比较[变量符号和关键字]

一 简单实例
1)batch file

  1. @echo off
  2.  
  3. rem output helloworld
  4. ::  output helloworld
  5. Echo Hello World!

小结:
- batch file一般以bat或cmd为后缀。
- 第一行为@echo off表示关闭运行时batch file本身输入,只输出运行的结果。
- rem和::表示注释。

2)shell file

  1. #!/bin/sh
  2.  
  3. # output helloworld
  4. echo helloworld!

小结:
-shell file一般以sh,ksh,bash等结尾。
-第一行为#!/bin/sh用来用那种shell解释程序来解释本shell脚本,因为shell有多种,常见的有sh,ksh,tsh,bash等。
-#用来在shell中表示注释。
-shell file执行前需要修改权限为可执行,例如:chmod a+x shellfile.sh。

二 变量
1)batch file

  1. Set Name = Value
  2. Set path = Name;%PATH%
  3. Echo %path%

小结:
-用set来定义变量,=两边不可以使用空格。
-变量间用;隔开。
-使用%%来使用变量的值。

2) shell file

  1. Name=Value
  2. PATH=Name:$PATH
  3. Echo $PATH

小结:
-变量直接定义,且=两边不能有空格。
-变量间用:隔开。
-使用$来使用变量的值。

三 特殊变量

小结:
-可以使用shift来使用超过10个变量。
-windows的batchfiles中%~dp0%表示当前文件的目录。

四 变量的特殊用法
变量的替换:
1)batch file

  1. %VariableName:ReplacementString=OriginalString%
  2. set a=belcome to CMD borld!
  3. set temp=%a:b=w%
  4. echo %temp%
  5. pause
  6. 将显示 welcome to CMD world! 即用w替换了变量a中的b

2)shell file

  1. ${VAR/PATTERN/STRING} or ${VAR//PATTERN/STRING} 语法。
  2.   第一种形式仅仅替换第一个匹配的项目,第二个用 STRING 替换所有匹配 PATTERN 的项目。

变量求子串:
1)batch file

  1.  
  2. %VariableName:~StartPosition,Length%
  3. set a=superhero 
  4. set temp=%a:~0,-3% 
  5. echo %temp% 
  6. pause 
  7. 将显示superh 即显示了变量a的第0位和第-3位中间包含的所有字符。

2) shell file

  1. ${varname:offset:length} Purpose: Returning parts of a string (substrings or slices).
  2. STRING="thisisaverylongname" 
  3. echo ${STRING:6:5} 

shell file中的其他的特殊用法:

  1. a. 变量=${参数-word}:如果设置了参数,则用参数的值置换变量的值,否则用word置换。即这种变量的值等于某一个参数的值,如果该参数没有设置,则变量就等于word的值。
  2. b. 变量=${参数=word}:如果设置了参数,则用参数的值置换变量的值,否则把变量设置成word,然后再用word替换参数的值。注意,位置参数不能用于这种方式,因为在Shell程序中不能为位置参数赋值。
  3. c. 变量=${参数?word}:如果设置了参数,则用参数的值置换变量的值,否则就显示word并从Shell中退出,如果省略了word,则显示标准信息。这种变量要求一定等于某一个参数的值。如果该参数没有设置,就显示一个信息,然后退出,因此这种方式常用于出错指示。
  4. d. 变量=${参数+word}:如果设置了参数,则用word置换变量,否则不进行置换。

五 Call/start/source/sh
1)batch file中call/start
call, 父bat中的vars可以在子bat中访问,且子bat的修改可以返回到父bat中,或者如果子bat中新定义的vars也可以带回到父中。(因为最后子bat和父bat在执行时被合并为同一个bat)。
Start,父bat中的vars可以在子bat中访问,但是子bat修改不会被反映到父bat中,且子中定义的变量不会被带到父中。(子bat和父bat是独立的进程)。

2) shell file中source/sh/.
Source同.命令,与batch file中的call相同,父shell中的vars可以在子shell中访问,且子shell的修改可以返回到父shell中,或者如果子shell中新定义的vars也可以带回到父中。(因为最后子shell和父shell在执行时被合并为同一个shell)。
Sh,同batch file的start,但是有区别,父shell中的vars不能被在子中访问,且子中的修改不会被反映到父shell中,子中定义的变量不能被带到父中。如果将父中的vars使用export导入子中,则在子中可见,但是修改仍不能被带回父中。(子shell和父shell是独立的进程)。

六 特殊符号

七 错误代码
1) batch file
-errorlevel用来上次命令的返回值,如果为0表示成功。
2) shell file
-$?用来表示上次命令的返回值,如果为0表示成功。
3)2> file 表示将错误重定向到file,2>&1 表示将错误输出重定向到与标准输出相同。0表示标准输入,1表示标准输入,2表示错误输出。

八 表达式计算
1)batch file

  1.  
  2. SET /A variable = Expression
  3. set /var=5+2 
  4. set /var=55*34 
  5. set /var=55/34
  6. set /var=55%%34
  7. set /var= (8+(9/3+7))*3
  8. set /a vat=55.1*34是错误的,因为批处理不支持浮点运算。
  9.  
  10. SET /A x = 1 
  11. SET /A y = 2 
  12. SET /A z = x + y + 3 
  13. ECHO z

2)shell file

  1.  
  2. a=2
  3. c=5
  4. let b=$a*$c
  5. echo $b
  6.  
  7. $((i++))
  8.  
  9. $((3 > 2)) 
  10. $(( (3 > 2) || (4 <= 1) )) 
  11.  
  12. declare -i val3=12 val4=5
  13. declare -i result2
  14. result2=val3*val4
  15. echo $result2

小结:
Shell file中:
1) 常用运算符号:
++ Increment by one (prefix and postfix) 
— Decrement by one (prefix and postfix) 
+ Plus 
- Minus 
* Multiplication 
/ Division (with truncation) 
% Remainder 
** Exponentiation[10] 
<< Bit-shift left 
>> Bit-shift right 
& Bitwise and 
| Bitwise or 
~ Bitwise not 
! Logical not 
^ Bitwise exclusive or
, Sequential evaluation
2) 字符串比较:
<                     Less than 
>                     Greater than 
<=                    Less than or equal to 
>=                    Greater than or equal to 
==                    Equal to 
!=                    Not equal to 
&&                    Logical and 
||                    Logical or
3) 整数比较:
-lt               Less than
-gt               Greater than
-le               Less than or equal to
-ge               Greater than or equal to
-eq               Equal to
-ne              Not equal to
九 完!

Batch pk Shell - WindowsBatch与LinuxShell比较 [变量符号和关键字]的更多相关文章

  1. LinuxShell脚本——变量和数据类型

    LinuxShell脚本——变量和数据类型 摘要:本文主要学习了Shell脚本中的变量和数据类型. 变量 定义变量的语法 定义变量时,变量名和变量值之间使用“=”分隔,并且等号两边不能有空格: 变量名 ...

  2. Shell学习(二)——变量和基本数据类型

    参考博客: [1]LinuxShell脚本--变量和数据类型 [2]shell只读变量删除 一.变量 定义变量的语法 定义变量时,变量名和变量值之间使用"="分隔,并且等号两边不能 ...

  3. 小符号反映大问题,Shell中下划线_与变量的关系。

    之前写过一个根据日期和时间自动命名文件名的时候遇到一个问题. #! /bin/bash read -p "please input the filename:" filename ...

  4. shell 基础(二)变量

    1. shell变量的定义 1)Shell 支持以下三种定义变量的方式: variable=value variable='value' variable="value" 特点 1 ...

  5. Linux-Shell基础(变量,字符串,数组)

    一. 什么是shell shell是一个用C语言编写的程序,它是用户使用Linux的桥梁,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统 ...

  6. [Linux]Shell的运算符和特殊变量

    说起Shell脚本,免不了用变量.特别是对于这种一堆符号表示变量的语言来说,你不了解一下相关变量的本意,根本无从下手.譬如写个循环遍历,$#就起了好大作用.所以还是有必要记录一下,也是对学习的一个笔记 ...

  7. shell脚本中特定符合变量的含义

    shell脚本中特定符合变量的含义: $#   传递到脚本的参数个数 $*    以一个单字符串显示所有向脚本传递的参数.与位置变量不同,此选项参数可超过9个 $$    脚本运行的当前进程PID号 ...

  8. Shell学习小结 - 深入认识变量

    移动端访问不佳,请访问我的个人博客 变量的命名 对于初学者来说,可以简单的理解为,变量就是保存在计算机内存中的一系列的键值对. 列如: str="hello" 这里的str就是变量 ...

  9. 利用SHELL脚本修改当前环境变量

    转自http://www.chinaunix.net/old_jh/7/21485.html 1.背景 ---- 在日常的工作中,为了设置一大批环境变量,我们通常编辑了一个shell程序,包含了多个的 ...

随机推荐

  1. Python的datetime模块使用

    两个常量 MAXYEAR:9999 MINYEAR:1 五个类 datetime.datetime:日期时间类 datetime.date:日期类 datetime.time:时间类 datetime ...

  2. fabs() abs()

    fabs() 面向实数取绝对值 abs() 返回int

  3. 一行代码在 .NET Core 中快速使用 log4net

    原文:一行代码在 .NET Core 中快速使用 log4net 1. .NET Core 控制台程序中使用 第一步:添加引用 Install-Package log4net 第二步:将附件 LogH ...

  4. mongo之$max

    原集合: { _id: 1, highScore: 800, lowScore: 200 } 应用: #意思是:更新_id 等于1 的记录,条件是highScore 950>原纪录的highSc ...

  5. 2018-2-13-win10-uwp-入门

    title author date CreateTime categories win10 uwp 入门 lindexi 2018-2-13 17:23:3 +0800 2018-2-13 17:23 ...

  6. unicode_start - 将控制台设为Unicode模式.

    总览 unicode_start [ font [ screen-font-map ] ] 描述 unicode_start 命令将显示屏及键盘设为 Unicode 模式, 并且有可能还会装载所用的 ...

  7. centos6.8 oracle 11.2.0.4 11g安装

    配置Linux系统参数 配置阿里云yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup ...

  8. main中的argc,argv

    那么我们运行程序时,传入的参数,就是这个argc的值:从截图中,我们很清楚的可以看出,argc是传入参数的个数,”传入的参数“加上可执行文件的文件名:  

  9. Eclipse导入Maven项目解决Build Path不能配置问题

    Eclipse Mars Release (4.5.0)导入Maven项目时,发现项目Build Path不能配置,如下图所示: 解决办法: 1修改Project Facets 项目右键---> ...

  10. DOM 对象和jQuery对象的转换

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...