shell脚本,shell语法和结构(以Cshell/TC shell为例)
1.C shell/TC shell常用语法和结构
(1) shbang行: #!/bin/sh,通知内核使用哪种内核解释脚本;
#!/bin/csh 或 #!/bin/tcsh
(2) 注释: 以#开头;
#This is a comment
(3) 通配符: *等;
(4) 显示输出: echo “***”;
echo "Hello!"
(5) 局部变量设置: set variable_name=value;
set name="Tom"
(6) 全局变量设置: setenv VARIABLE_NAME value;
setenv PRINTER shakespeare
(7) 提取变量值: echo $variable_name;
echo $anme
echo $PRINTER
(8) 读取用户输入:通过$<从用户输入中读取一行并将其赋给一个变量,如set name=$<;
echo "What's your name?"
set name=$<
(9) 脚本命令行参数: scriptname arg1 arg2 arg3 ...,其中arg1,arg2,arg3...将依次赋给$1,$2,$3...(或者$argv[1], $argv[2], $argv[3]...);使用echo $*(或echo $argv[*])可以显示所有命令行参数;
scriptname arg1 arg2 arg3 ...
echo $1 $2 $3
echo $*
echo $argv[1] $argv[2] $argv[3]
echo $argv[*]
(10) 数组:用空格隔开的一系列词组成的词表,由一对圆括号括起来; 注意,使用索引访问数组中的某个单词,索引值从1开始,而不是从0开始;
set word_list = (word1 word2 word3)
set names = (Tom Harry)
shift names
echo $word_list[1]
echo $word_list[2]
echo $word_list or echo $word_list[*]
(11) 算术运算: 保存算数运算结果的变量必须以一个@符号加一个空格开头;
@ n = 5+5
echo $n
注1:符号@后面以及运算符两侧都必须有空格;
(12) 条件语句(if结构与switch结构)
#if结构
if(expression) then
block of statements
endif #if/else结构
if(expression) then
block of statements
else
block of statements
endif #if/else if/else结构
if(expression) then
block of statements
else if(expression) then
block of statements
else if(expression) then
block of statements
else
block of statements
endif
switch (variable_name)
case constant1:
statements
case constant2:
statements
case constant3:
statements
default:
statements
endsw
(13) 循环语句(while循环与foreach循环)
while(expression)
block of statements
end foreach variable (word list)
block of statements
end
(14) 文件测试
-r 当前用户可以读该文件
-w 当前用户可以写该文件
-x 当前用户可以执行该文件
-e 该文件存在
-o 该文件属于当前用户
-z 该文件长度为0
-d 该文件是一个目录
-f 该文件是一个普通文件
2.C shell/TC shell示例(比较有趣,可以发送邮件)
#!/bin/csh #如果该句末尾加上-f,则表示不要执行.cshrc文件;通常情况下,每当一个新的csh程序启动时,会自动执行一个初始化文件;
# The party program-invitations to friends from the "guest" file set guestfile=~/guests
if( ! -e "$guestfile") then
echo "$guestfile:t non-existent" #注意,:t比较有意思,如果不添加,会显示guestfile的完整名字,如果添加,则只显示guests;
exit 1
endif setenv PLACE "Sarotini's"
@ Time='date +%H' + 1 set food=( cheese crackers drinks "hot dogs" ) foreach person (`cat $guestfile`)
if( $person =~ root ) continue
mail -v -s "Parity" $person <<FINIS #start of here document
Hi $person! Please join me at $PLACE for party!
Meet me at $Time o'clock.
I'll bring the ice cream. Would you please bring $food[1] and
anything else you would like to eat? Let me know if you can
make it. Hope to see you soon.
Your pal,
ellie@`hostname`
FINIS
shift food
if( $#food ==0 ) then
set food=( cheese crackers drinks "hot dogs" )
endif
end
shell脚本,shell语法和结构(以Cshell/TC shell为例)的更多相关文章
- Linux Shell脚本简单语法汇总(Deepin下运行)
整理自: https://www.runoob.com/?s=shell Shell 脚本(shell script),是一种为 shell 编写的脚本程序. 业界所说的 shell 通常都是指 sh ...
- shell脚本启动语法错误syntax error near unexpected token '{
执行shell脚本时失败,报语法错误,但脚本内容检查正常 原因为该脚本是在非Linux系统下编辑之后放到系统执行的,文件模式类型非Linux系统匹配的模式类型. 查看文件的模式类型 显示文件的模式类型 ...
- Shell脚本部分语法
Shell中的变量 Linux Shell中的变量分为“系统变量”和“用户自定义变量”,可以通过set命令查看那系统变量 系统变量:$HOME.$PWD.$SHELL.$USER等等 显示当前sh ...
- 《Linux命令行与shell脚本编程大全》 第五章理解shell
5.1 1. cat /etc/passwd 可以查看每个用户自己的默认的shell程序. 2.默认的交互shell会在用户登录某个虚拟控制台终端时启动. 不过还有另外一个默认的shell是/bin/ ...
- 【Shell脚本学习4】几种常见的Shell
上面提到过,Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本. Unix/Linux上常见的Shell脚本解释器有bash.sh.csh.ksh等,习惯上把它们称作一种Shell.我们常说 ...
- 《Linux命令行与shell脚本编程大全》- 读书笔记3 - 理解shell
当用户登录终端的时候,通常会启动一个默认的交互式shell.系统究竟启动哪个shell,这取决于用户配置.一般这个shell都是/bin/shell.默认的系统shell(/bin/sh)用于系统sh ...
- 《Linux命令行与shell脚本编程大全 第3版》高级Shell脚本编程---47
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- 运维shell脚本函数语法
在fun.sh 文件里,使用函数来封装脚本内容 usege() { echo "hello world" echo "脚本怎么使用函数......"}usege ...
- (十五)、shell脚本之简单控制流结构
一.基本的控制结构 1.控制流 常见的控制流就是if.then.else语句提供测试条件,测试条件可以基于各种条件.例如创建文件是否成功.是否有读写权限等,凡是执行的操作有失败的可能就可以用控制流,注 ...
- shell脚本常用语法详解
逻辑控制 if 语法:注意空格 a=1b=2if [ $a == $b ]then echo "a==b"elif [ $a -gt $b ]then echo &qu ...
随机推荐
- CF825F - String Compression
题意:压缩字符串,把字符串分成若干个子串,每个子串可以被压缩成"循环次数 \(+\) 循环节"的形式,求最小长度. dp 求 lcp 先 \(O(n^2)\) dp 求出所有后缀对 ...
- 【django-vue】封装logger 封装全局异常 封装response 数据库配置 用户表继承AbstractUser配置
目录 上节回顾 python运行流程 项目目录调整(重要) 关于环境变量的问题 今日内容 1 django后端配置之封装logger 2 后端配置之封装全局异常 补充说明 3 后端配置之二次封装res ...
- 爆肝200+小时,总结出的 Creator 3.x 入门修炼指南!全免费
大家好,我是晓衡! 为了写这篇文章,给支持公众号的读者们一个交代,我准备了200+小时,公众号断更11天.我决定,不再选择逃避,不想再欺骗自己了. 2023新年开工,不到十天时间,接二连三有小伙伴找到 ...
- [NPUCTF2020]EzRSA
[NPUCTF2020]EzRSA 题目: from gmpy2 import lcm , powmod , invert , gcd , mpz from Crypto.Util.number im ...
- latex table \ref{}编号混乱
解决:\lable{}要紧放在\caption{}下 点击查看代码 \begin{table} ... \caption{Table A} \label{TableA} ... \end{table}
- 任务队列神器:Celery 入门到进阶指南
任务队列神器:Celery 入门到进阶指南 发布于2021-03-24 16:24:53阅读 1.9K0 1.什么是celery celery是一个简单,灵活.可靠的分布式任务执行框架,可以支持大 ...
- MyFreeMarkerConfigurer
public class MyFreeMarkerConfigurer extends FreeMarkerConfigurer { @Override public void afterProper ...
- pnpm 中无法使用 patch-package 打补丁
原文:https://lwebapp.com/zh/post/pnpm-patch-package 介绍 前端开发过程中,经常会遇到第三方开源库有 BUG 的情况,通常我们有以下处理方式 自己 for ...
- vim 小记录
将str1批量替换成str2 , 特殊符号前用转译符 \ :%s/str1/str2/g
- Oracle —— 对表数据操作的各种小Tip
1.清空某表数据 TRUNCATE TABLE schema_name.table_name 例如:在名为test的schema下,有一张名为user的表,故此,可用TRUNCATE TABLE te ...