SHELL的语法和结构
来源:互联网 发布:新还珠格格知乎 编辑:程序博客网 时间:2024/05/18 00:16
- shbang行:
shbang行是脚本的第一行,通知内核使用哪种shell解释脚本中的行。由散列符号(#)、bang(!)和shell的完整路劲组成。
#! /bin/csh #! /bin/tcsh
- 注释:
符号#后接描述性说明组成,可从行的任意位置开始,到行尾结束。
# This is a comment.
- 通配符:
也称作shell元字符,这些字符既非数字也非字母,具备特殊意义。
*、?、[]常用于文件名扩展
’ ! 是历史命令符
<、>、>>、<&和 | 符号则用于标准I/O重定向和管道
这些字符必须用反斜杠或引号进行引用。
rm *; ls ??; cat file[1-3]; !!echo "How are you?"echo Oh boy\!
- 显示输出:
echo命令用于向屏幕显示输出。通配符必须使用反斜杠和配对引号进行转义。
echo "Hello to you\!"
- 局部变量:
局部变量的作用域被限定在当前shell中。当一个脚本执行结束或者shell退出后,它们不再可用。即:超出了作用域。可以创建局部变量并为其赋值。
set variable_name = valueset name = "Tom Jones"
- 全局变量:
全局变量又称环境变量。它们再当前运行的shell中创建,可由该shell派生得任意进程使用。一旦脚本结束或者定义该全局变量得shell退出,它将超出作用域。
setenv VARIABLE_NAME valuesetenv PRINTER Shakespeare
- 提取变量值
使用美元符号可以从变量中提取数值。
echo $variable_nameecho $nameecho $PRINTER
- 读取用户输入
特殊变量$<从用户输入中读取一行并将它赋给一个变量。
echo "What is your name?"set name = $<
- 参数
可以从命令行传递参数给脚本,有两种方法可以在脚本中得到它们的值:位置参量和argv数组。
% scriptname arg1 arg2 arg3 ...#使用位置:echo $1 $2 $3 #arg1赋给$1,arg2赋给$2等等echo $* #所有参数#使用argv数组:echo $argv[1] $argv[2] $argv[3]echo $argv[*] #所有参数echo $#argv #参数个数
- 数组
数组是用空格隔开的一列词组成的词表,由一对圆括号括起来。内置的shift命令将词表左数第一个单词移开。与C语言不同的是,使用索引访问数组中的某个单词,索引值从1开始,而不是从0开始。
set word_list = ( word1 word2 word3 )set name = ( Tom Dick Harry Fred )shift names #将Tom从词表中去掉echo $word_list(1) #显示词表中的第1个元素echo $word_list(2) #显示词表中的第2个元素echo $word_list or $word_list(*)#显示词表中所有元素echo $names[1]echo $names[2]echo $names[3]echo $names or echo $names[*]
- 命令替换
将UNIX/Linux命令的输出赋给一个变量,或者在字符串中使用某个命令的输出,命令由反引号引起来。
set variable_name='command'echo $variable_nameset now = 'date' #反引号中的命令被执行,其输出赋给变量nowecho $nowecho "Today is 'date'" #date命令的输出被插入到字符串中
- 算术运算
保存算术运算结果的变量必须以一个@符号加一个空格开头。
@ n = 5 + 5echo $n
- 运算符
#等式运算符== !=#关系运算符> 大于>= 大于等于< 小于<= 小于等于#逻辑运算符&& 与|| 或! 非
- 条件语句
if结构后跟着一个用括号括起来的表达式。运算符类似于C运算符,关键字then放在闭括号之后。if必须由endif结束。if/else if 等价于switch语句。
#if结构if ( expression ) then block of statementsendif#if/else结构if ( expression ) then block of statementselse block of statementsendif#if/else/else if结构if ( expression ) then block of statementselse if ( expression ) then block of statementselse if ( expression ) then block of statementsendif#switch结构switch variable_name case constant1: statements case constant2: statements case constants3: statementsdefault: statementsendswswtich ("$color") case blue: echo $color is blue breaksw case green: echo $color if red or orange breaksw default: echo "Not a valid color"endsw
- 循环语句
有两种类型的循环,while循环和foreach训话。
while循环后哦跟着一个用圆括号括起来的表达式,一个语句段,最后以关键字end结束,只要表达式为真,循环将会一直持续。
foreach循环后跟着一个变量,一个用圆括号括起来的词表,一个语句段,最后以关键字end结束。foreach循环遍历词表,对每个词进行处理后将其移开,然后继续处理下一个词,当词表中所有词都被移走后,循环结束。
循环控制命令为break和continue。
while ( expression ) block of statementsendforeach variable ( word list ) block of statementsend###############foreach color (red green blue) echo $colorend
- 文件测试
C shell 有一个内置的选项集可以用来测试文件属性,例如文件是否是目录文件、普通文件(不是目录)、可读文件等。使用UNIX test命令还可以进行其他类型的文件测试。使用方法参见范例。
-r 当前用户可以读该文件-w 当前用户可以写该文件-x 当前用户可以执行该文件-e 该文件存在-o 该文件属于当前用户-z 该文件长度为0-d 该文件是一个目录-f 该文件是一个普通文件
#范例#!/bin/csh -f1 if ( -e file ) then echo file exists endif2 if ( -d file ) then echo file is a directory endif3 if ( ! -s file ) then echo file is not of zero length endif4 if ( -r file && -w file ) then echo file is readable and writable endif
0 0
- SHELL的语法和结构
- Shell中结构语法
- XML的结构和语法
- 关于shell中if 语法结构的广泛误解
- 通过shell例子来学习循环结构的语法
- Linux脚本编程/shell语法和shell进度条的编写
- 关于shell语法 和shell进度条之间的事儿
- 表单的基本结构和语法
- 语义和语法结构之间的关系
- 简单shell脚本语法及结构
- shell语法整理-结构化命令
- Shell中的grep、awk和sed的常用命令和语法
- Shell中的grep、awk和sed的常用命令和语法
- Shell中的grep、awk和sed的常用命令和语法
- Shell中的grep、awk和sed的常用命令和语法
- Shell中的grep、awk和sed的常用命令和语法
- Shell中的grep、awk和sed的常用命令和语法
- Shell中的grep、awk和sed的常用命令和语法
- 异步复位同步释放
- 摘要常用code片段
- Meta标签详解
- RabbitMQ之任务分发篇
- Android学习24
- SHELL的语法和结构
- 网易互联网产品运营管培生面试经历--从群面到终面面试经验分享
- <学习笔记>Android使用Loader加载sqlite数据到ListView
- Hello World程序背后的故事解密(一)—— 编译器的选项和C运行时库
- pg数据库在Linux中安装失败,提示the database cluster initialisation failed
- 常见 HTTP/FTP/WebSocket 错误代码大全
- Intel Edison Arduino 温度检测并上传至网站
- 如何学好游戏3D引擎编程
- 同步FIFO的编写