1. 查看系统有哪些可用的shell

  cat /etc/shell

2. 每种shell都有一个特殊内置变量来存上一条命令的退出状态,例:

  C/TC shell  $status

  % cp fx fy

  % echo $status   # 显示cp的退出状态,0成功,1失败

  Bourne,Bash,Korn Shells  $?

  $ cp fx fy

  $ echo $?        # 显示cp的退出状态,0成功,1失败

C shell, TC shell编程语法与结构

  1. shbang行  

    是脚本第一行,通知内核使用哪种shell解释脚本,如

C /TCshell korn shell Bourne shell bash
#!/bin/csh  #!/bin/ksh #!/bin/sh #!/bin/bash

  2. 注释   符号# 注释其后的一行

  3. 通配符

    特殊字符,被称作是shell的元字符或通配符,如*、?、[]用于文件名扩展, <、>、>>、<&、|用于重定向和管道,如果要直接使用这些字符必须用反斜杠或引号进行引用,如

      echo "how old are you?"      # C, TC , Bourne, korn, bash shell

      echo ok \!          #C shell, TC shell

  4. 显示输出  echo命令,korn还提供了内置命令print

  5. 局部变量

C /TCshell korn shell Bourne shell bash
set variable = value    

variable = value

typeset   variable=value

variable=value

variable=value

declare var=val

  

  6. 全局变量

C/TC shell korn shell Bourne shell bash
setenv VARIABLE value     export VARIABLE =value  

VAR=value

export VAR

export VARIABLE =value

declare -x VAR=value

  

  7. 提出变量值

    用符号$, 如 $variable

  8. 读取用户输入

  C\TC shell Bourne\Bash shell korn
符号或命令 $<

read命令

  从用户输入中读取一行并将它赋给该命令右侧

的一个或多个变量

ex echo "input number .. "

set num = $<

说明:读取用户输入并给变量赋值

echo "what is your name?"

read name

read n1 n2

read name?"your name?"

print -n "your name?"

read name

read n1 n2

  

  9. 参数

  C\TC shell Bourne\Bash\korn shell
符号或命令 scriptname arg1 arg2      

scriptname arg1 arg2

ex

$1 表示第一个参数arg1

$* 表示所有参数

$argv[1]第一个参数

$argv[*]所有参数

$#argv 表示参数个数。

$1 第一个参数

$* 所有位置参数

$# 参数个数

  

  10. 数组

  C,TC shell Bourne shell
define

数组是一系列的词表,由()括起来,空格隔开,下标索引从1开始,

内置命令shift将数组中左边第一个词移开

set内置命令后跟一系列词,每个词可通过位置来访问,

最多允许使用9个位置。下标索引从1开始,内置命令

shift将数组中左边第一个词移开

ex

set word_list = (a b c)

shift word_list   # remove 'a' from word_list

echo $word_list[1]     # display 'b'

echo $word_list or echo $word_list[*]   # display all elements of word_list

set a b c

echo $1 #显示第一个参数 'a'

shift  # remove 'a' from word_list

$* 所有位置参数

     korn shell:
  位置参数创建的数组元素下标从1开始,set -A创建的数组元素下标从0开始,如
    set apples pears peaches #位置参数
    print $ $ $ # $ is apples
    set -A arr w1 w2 w3 ... #数组
    print ${arr[]} #打印w1
  Bash:
  与korn shell类似,如
    set apples pears peaches #位置参数
    print $ $ $ # $ is apples
    declare -a arr=( w1 w2 w3 ... ) #数组
   echo ${arr[]} #打印w1

  11. 命令替换

    反引号`可以将其包含的字符解释成命令,如

      set now = "today is `date`"   # date将作为命令执行并将结果插入到原处

    korn\bash shell 还除了可用反引号替换命令,还支持另一种语法,如

      today = " today is `date`"

      today = "today is $(date)"

  12. 算术运算

  C,TC shell Bourne shell
define

保存算术运算结果的变量必须以一个@符号加一个空格开头

不支持算术运算,通过linux/unix命令计算

ex

@ nvalue = 4+1

n=`expr 5+5`

echo $n

  

  korn shell:

    typeset -i var   #声明整数

    num=5+5      #声明整数后可进行计算

    ((m = 4+4))    #(())语法表示算术运算,即let命令

  bash shell:

    typeset -i var   #声明整数,与ksh兼容

    declare -i var

    num=5+5      #声明整数后可进行计算

    ((m = 4+4))    #(())语法表示算术运算,即let命令

  13. 运算符

  C/TC /korn/bash shell Bourne shell  
等式运算符

==

(korn: '=' for str,'=='for numric)

=字符串

-eq 数字

等式判断
  !=

!= 字符串

-ne 数字

不等
关系运算符 > -gt 大于
  >= -ge 大于等于
  < -lt 小于
  <= -le 小于等于
逻辑运算符 && -a
  || -o
  ! !

  

14. 条件运算

  C/TC shell:

#C/TC shell
if (expr) then
//todo
endif
----------------------------------------------------------------------------------------------
if (expr) then
//todo
else if (expr) then
//todo
else
//todo
endif
-------------------------------------------------------------------------------------------------
switch ("$color")
  case blue:
    echo $color is blue
    breaksw
  case green:
    echo $color is green
    breaksw
  default:
    echo no color
endsw

  Bourne shell:

#Bourne shell
if expr # expr form : command, [expression]
then
//todo
fi
---------------------------------------------------------------------------
if expr # expr form : command, [expression]
then
//todo
elif expr
then
//todo
else
//todo
fi
---------------------------------------------------------------------------
case "$color" in
  blue)
    echo $color is blue
    ;;
  green)
    echo $color is green
    ;;
  *) echo no color #default case
esac

  korn\bash shell:

korn\bash
if expr # expr :command, [[string expr]], ((numeric expr))
then
// to do
fi
----------------------------------------------------------------------
if exp
then
//to do
elif exp
then
//to do
else
//do do
fi
-----------------------------------------------------------------------
case usage is the same as bourne shell

15. 循环

  C/TC shell :

  while后跟一个用圆括号括起来的表达式,一个语句段,以end结束. foreach后跟一个变量,一个用圆括号括起来的词表,一个语句段,最后以关键字end结束。foreach遍历词表,对每个词处理后将其移开,所有词被移开后,循环结束。

#C/TC shell
while (exp)
//todo
end
------------------------------------------
foreach color(red green blue)
echo $color
end

  Bourne shell:

#Bourne shell     while, until, for
while exp #exp : command, [expr]
do
//todo
done
-------------------------------------------------
until exp #exp : command, [expr]
do
//todo
done
-------------------------------------------------
for
var in a b c
do
//todo
done

  korn\bash shell:

  while, until, for , select 4个循环,前三个与前面的一样,就不说了。select循环提供一条提示信息和多个选项的菜单,用户从中选择一项,这个输入将被存在内置的特定变量REPLY中。

korn\bash shell:
while exp # exp 可选形式 cmd, [[str expr]], ((num expr))
do
//todo
done until exp #exp 可选形式 cmd, [[str expr]], ((num expr))
do
//todo
done for name in tom dic harry #traverse list and remove the first item
do
//todo
done select var in wordlist
do
//todo
done

16. 函数定义

  korn shell:

#korn shell
func() { #from bourne shell
//todo
}
---------------------------------------
function func { #korn version
//todo
echo current directory is `pwd`
}

17. 文件测试  

C/TC shell

Bourne shell

Kornshell

-r 当前用户可以读该文件

-w 当前用户可写该文件

-x 当前用户可执行该文件

-e 文件存在

-o 该文件属于当前用户

-z 该文件长度为0

-d 该文件是一个目录  

-f 该文件是一个普通文件

-r 当前用户可以读该文件

-w 当前用户可写该文件

-x 当前用户可执行该文件

-s 该文件大小非0

-d 该文件是一个目录  

-f 该文件是一个普通文件

-d 该文件是一个目录

-r 当前用户可以读该文件

-a 该文件存在且不是目录

-s 该文件大小非0

-w 当前用户可写该文件

-x 当前用户可执行该文件

UNIX shell 学习笔记 一 : 几个shell的规则语法对比的更多相关文章

  1. shell 学习笔记1-什么是shell,shell变量

    一.介绍 1.什么是shell Shell 既是一种命令语言,又是一种程序设计语言,他在操作系统得最外层,负责直接与用户对话,把用户得输入解释个OS,并处理各类操作系统得输出结果,输出到屏幕返回个i用 ...

  2. 【转】shell学习笔记(二) ——shell变量

    在shell中有3种变量:系统变量,环境变量和用户变量,其中系统变量在对参数判断和命令返回值判断时会使用,环境变量主要是在程序运行时需要设置,用户变量在编程过程中使用量最多. 1 系统变量  变量名 ...

  3. shell 学习笔记2-shell-test

    一.字符串测试表达式 前面一篇介绍:什么是shell,shell变量请参考: shell 学习笔记1-什么是shell,shell变量 1.字符串测试表达式参数 字符串需要用""引 ...

  4. shell学习笔记

    shell学习笔记 .查看/etc/shells,看看有几个可用的Shell . 曾经用过的命令存在.bash_history中,但是~/.bash_history记录的是前一次登录前记录的所有指令, ...

  5. [转帖][Bash Shell] Shell学习笔记

    [Bash Shell] Shell学习笔记 http://www.cnblogs.com/maybe2030/p/5022595.html  阅读目录 编译型语言 解释型语言 5.1 作为可执行程序 ...

  6. shell学习笔记汇总

    1.shell脚本中函数使用 函数定义在前,调用在后,顺序反了就没有效果了.函数调用为:函数名 参数列表 函数内部通过以下变量访问函数的参数:shell脚本函数中: $0: 这个脚本的名字 $n: 这 ...

  7. SHELL学习笔记----IF条件判断,判断条件

    SHELL学习笔记----IF条件判断,判断条件 前言: 无论什么编程语言都离不开条件判断.SHELL也不例外.  if list then           do something here   ...

  8. SHELL学习笔记三

    SHELL学习笔记一 SHELL学习笔记二 SHELL学习笔记三 for 命令 读取列表中的复杂值 从变量读取列表 从命令读取值 更改字段分隔符 用通配符读取目录 which 使用多个测试命令 unt ...

  9. thinkphp学习笔记10—看不懂的路由规则

    原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂. 1.路由定义 要使用路由功能需要支持PATH_INF ...

  10. thinkphp学习笔记1—目录结构和命名规则

    原文:thinkphp学习笔记1-目录结构和命名规则 最近开始学习thinkphp,在下不才,很多的问题看不明白所以想拿出来,恕我大胆发在首页上,希望看到的人能为我答疑解惑,这样大家有个互动,学起来快 ...

随机推荐

  1. JavaScript词法分析解析

    函数在调用之前,会进行词法分析或者叫语法分析: 1. 函数在形成调用的那一瞬间,会有一个活动对象叫 active object ,简称AO,会分析如下几条: 形式参数 函数内局部变量声明 函数声明表达 ...

  2. BZOJ5314:[JSOI2018]潜入行动——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5314 https://www.luogu.org/problemnew/show/P4516 ht ...

  3. 实验三 Java敏捷开发与XP实践

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计                         班级:1353            姓名:陈巧然     ...

  4. Javascript让你的网页标题飘动起来

    如果你有使用WebQQ,你也许会发现,每次收到信息的时候,就会看到title提示哪个网友或群来信息,然后网页的title就会开始飘动,挺人性化,蛮有意思的.而这个效果其实也不难,这里实现了这个效果,演 ...

  5. 如何设置Eclipse使用JDK

      1.打开Eclipse,选择Windows->Preferences,如图所示: 2.配置本地安装的jdk,如图所示: 注意:首先要先安装JDK.     木头大哥所发的文章均基于自身实践, ...

  6. Codeforces Round #343 (Div. 2) A

    A. Far Relative’s Birthday Cake time limit per test 1 second memory limit per test 256 megabytes inp ...

  7. sshSSH Secure Shell Client root用户无法登录解决办法

    最近使用这个工具,普通用户可以登录root用户不可以登录.将vi /etc/ssh/sshd_config按照下述配置解决问题 修改sshd配置文件:vi /etc/ssh/sshd_config P ...

  8. Lucene4.6至 Lucene6.6的每个迭代对API的改动

    由于项目需求,需要将Lucene4.6升级到Lucene6.6,因此我对这之间的所有重要的API改动做了搜集:特别重要的改变加粗显示. Lucene4.7改动: LUCENE-5405: Make S ...

  9. EL表达式获取对象属性的原理

    EL表达式获取对象属性的原理是这样的: 以表达式${user.name}为例 EL表达式会根据name去User类里寻找这个name的get方法,此时会自动把name首字母大写并加上get前缀,一旦找 ...

  10. String.replaceAll()方法替换字符串中的反斜杠(\)

    replaceAll()方法实际是采用正则表达式的规则去匹配的. 在regex中"\\"表示一个"\",在java中一个"\"也要用&quo ...