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为例)的更多相关文章

  1. Linux Shell脚本简单语法汇总(Deepin下运行)

    整理自: https://www.runoob.com/?s=shell Shell 脚本(shell script),是一种为 shell 编写的脚本程序. 业界所说的 shell 通常都是指 sh ...

  2. shell脚本启动语法错误syntax error near unexpected token '{

    执行shell脚本时失败,报语法错误,但脚本内容检查正常 原因为该脚本是在非Linux系统下编辑之后放到系统执行的,文件模式类型非Linux系统匹配的模式类型. 查看文件的模式类型 显示文件的模式类型 ...

  3. Shell脚本部分语法

    Shell中的变量   Linux Shell中的变量分为“系统变量”和“用户自定义变量”,可以通过set命令查看那系统变量 系统变量:$HOME.$PWD.$SHELL.$USER等等 显示当前sh ...

  4. 《Linux命令行与shell脚本编程大全》 第五章理解shell

    5.1 1. cat /etc/passwd 可以查看每个用户自己的默认的shell程序. 2.默认的交互shell会在用户登录某个虚拟控制台终端时启动. 不过还有另外一个默认的shell是/bin/ ...

  5. 【Shell脚本学习4】几种常见的Shell

    上面提到过,Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本. Unix/Linux上常见的Shell脚本解释器有bash.sh.csh.ksh等,习惯上把它们称作一种Shell.我们常说 ...

  6. 《Linux命令行与shell脚本编程大全》- 读书笔记3 - 理解shell

    当用户登录终端的时候,通常会启动一个默认的交互式shell.系统究竟启动哪个shell,这取决于用户配置.一般这个shell都是/bin/shell.默认的系统shell(/bin/sh)用于系统sh ...

  7. 《Linux命令行与shell脚本编程大全 第3版》高级Shell脚本编程---47

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  8. 运维shell脚本函数语法

    在fun.sh 文件里,使用函数来封装脚本内容 usege() { echo "hello world" echo "脚本怎么使用函数......"}usege ...

  9. (十五)、shell脚本之简单控制流结构

    一.基本的控制结构 1.控制流 常见的控制流就是if.then.else语句提供测试条件,测试条件可以基于各种条件.例如创建文件是否成功.是否有读写权限等,凡是执行的操作有失败的可能就可以用控制流,注 ...

  10. shell脚本常用语法详解

    逻辑控制 if 语法:注意空格 a=1b=2if [ $a == $b ]then    echo "a==b"elif [ $a -gt $b ]then    echo &qu ...

随机推荐

  1. DBeaver连接clickhouse无法下载驱动的情况

    最近遇到dbeaver 连接clickhouse的时候提示下载驱动失败. 在网上找了些方法也不行,其中包括默认下载.配置阿里云的Maven. 最后在网上找到一个驱动包,自己手动添加即可.把下载地址分享 ...

  2. LeetCode-429 N叉树的层次遍历

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal著作权归领扣网络所有.商业转载请联 ...

  3. Linux操作命令(五)1.find命令 2.xargs命令

    1.find命令(一) 查找,沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作 参数 描述 -print find 命令将匹配的文件输出到标准输出 -exec find 命令对匹配的文件 ...

  4. 报错解决:DENIED Redis正在保护模式下运行

    DENIED Redis正在保护模式下运行,因为已启用保护模式,未指定绑定地址,也未向客户端请求身份验证密码.在此模式下,仅接受环回接口的连接.如果您想从外部计算机连接到Redis,您可以采用以下解决 ...

  5. [C#]为debug添加DebuggerDisplay属性

    最近才发现,DebuggerDisplay 非常弓虽大,给类添加DebuggerDisplay属性后可以让调试变得更简单.如何使用? 1.定义一个有DebuggerDisplay的类:在类的头部添加& ...

  6. Educational Codeforces Round 137 (Rated for Div. 2) - E. FTL

    DP Problem - E - Codeforces 题意 有个 BOSS 有 \(H\;(1<=H<=5000)\) 血量,\(s\) 点防御 有两种武器可用攻击 BOSS,伤害分别为 ...

  7. pycharm过期解决方案

    如果你的pycharm老是过期,你可以直接下载最新版本的pycharm,然后加入一个网站获取激活码即可 http://idea.medeming.com/jets/

  8. yum源更换为阿里云源

    #首先备份/etc/yum.repos.d/CentOS-Base.repocp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-B ...

  9. 前端实现电子签名(web、移动端)通用组件(canvas实现)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. MYSQL启动:'服务没有相应控制功能'问题解决

    启动 MySQL 服务,此处若是显示错误'服务没有相应控制功能' 尝试解决方法:访问如下网站: https://cn.dll-files.com/vcruntime140_1.dll.html  下载 ...