UNIX shell 学习笔记 一 : 几个shell的规则语法对比
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的规则语法对比的更多相关文章
- shell 学习笔记1-什么是shell,shell变量
一.介绍 1.什么是shell Shell 既是一种命令语言,又是一种程序设计语言,他在操作系统得最外层,负责直接与用户对话,把用户得输入解释个OS,并处理各类操作系统得输出结果,输出到屏幕返回个i用 ...
- 【转】shell学习笔记(二) ——shell变量
在shell中有3种变量:系统变量,环境变量和用户变量,其中系统变量在对参数判断和命令返回值判断时会使用,环境变量主要是在程序运行时需要设置,用户变量在编程过程中使用量最多. 1 系统变量 变量名 ...
- shell 学习笔记2-shell-test
一.字符串测试表达式 前面一篇介绍:什么是shell,shell变量请参考: shell 学习笔记1-什么是shell,shell变量 1.字符串测试表达式参数 字符串需要用""引 ...
- shell学习笔记
shell学习笔记 .查看/etc/shells,看看有几个可用的Shell . 曾经用过的命令存在.bash_history中,但是~/.bash_history记录的是前一次登录前记录的所有指令, ...
- [转帖][Bash Shell] Shell学习笔记
[Bash Shell] Shell学习笔记 http://www.cnblogs.com/maybe2030/p/5022595.html 阅读目录 编译型语言 解释型语言 5.1 作为可执行程序 ...
- shell学习笔记汇总
1.shell脚本中函数使用 函数定义在前,调用在后,顺序反了就没有效果了.函数调用为:函数名 参数列表 函数内部通过以下变量访问函数的参数:shell脚本函数中: $0: 这个脚本的名字 $n: 这 ...
- SHELL学习笔记----IF条件判断,判断条件
SHELL学习笔记----IF条件判断,判断条件 前言: 无论什么编程语言都离不开条件判断.SHELL也不例外. if list then do something here ...
- SHELL学习笔记三
SHELL学习笔记一 SHELL学习笔记二 SHELL学习笔记三 for 命令 读取列表中的复杂值 从变量读取列表 从命令读取值 更改字段分隔符 用通配符读取目录 which 使用多个测试命令 unt ...
- thinkphp学习笔记10—看不懂的路由规则
原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂. 1.路由定义 要使用路由功能需要支持PATH_INF ...
- thinkphp学习笔记1—目录结构和命名规则
原文:thinkphp学习笔记1-目录结构和命名规则 最近开始学习thinkphp,在下不才,很多的问题看不明白所以想拿出来,恕我大胆发在首页上,希望看到的人能为我答疑解惑,这样大家有个互动,学起来快 ...
随机推荐
- I/O复用----poll
2018-08-01 (星期三)poll(): #include <sys/poll.h> int poll (struct pollfd *fd, unsigned int nfds, ...
- BZOJ2002:[HNOI2010]弹飞绵羊——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=2002 https://www.luogu.org/problemnew/show/P3203 某天, ...
- BZOJ1499:[NOI2005]瑰丽华尔兹——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1499 舞厅是一个N行M列的矩阵,矩阵中的某些方格上堆放了一些家具,其他的则是空地.钢琴可以在空地上滑 ...
- BZOJ1588:[HNOI2002]营业额统计——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1588 Description Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务 ...
- 51NOD 1565:模糊搜索——题解
http://www.51nod.com/onlineJudge/questionCode.html#problemId=1565¬iceId=445588 有两个基因串S和T,他们只包 ...
- [bzoj] 2049 洞穴勘探 || LCT
原题 这是一道LCT的板子题. 至于LCT--link cut tree,也叫动态树,用splay实现动态连边的树. 预备知识: 实边:一个非叶节点,向它的儿子中的一个连一条特殊的边,称为实边;该非叶 ...
- 【二分】【P1314】 【NOIP2011D2T2】聪明的质监员
传送门 Description 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 \(n\) 个矿石,从 \(1\) 到 \(n\) 逐一编号,每个矿石都有自己的重量 \(w_i\) ...
- Eclipse的Project Facets属性设置解决项目无故报错
新检出项目,发现代码无故报错,各种尝试,最终发现是因为 项目右键中的 project Facets 属性中的 java 后面的 version 版本和项目 build path 的 jdk 版本不一 ...
- HDU 5650 异或
so easy Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
- swift的一些东西
.cmd+k 键盘toggle .模拟器的handware设置ios键盘 .设置textfield的return类型为搜索 k.returnKeyType=UIReturnKeyType.search ...