【shell】Cshell
csh -vx 用来显示输入的原样和变量替换后的脚本,用来帮助调试。
变量
- 通过set来定义局部变量x,通过$x(或${x})来使用变量x的值;
- $%x 表示变量的值的长度;
- $?x 来判断变量x是否设置,如设置则为1,否则为0;
set x = 5echo ${x} # echo ${x}, echo $%x
全局变量(也叫系統變量)的定义setenv v value 该变量将被此shell派生的所有子shell继承。
unsetenv MINUS_SRC_USER
setenv MINUS_SRC_USER dv01055
变量修饰符
:r 返回变量的根。
:e 返回变量的扩展。
:h 返回变量的头。
:t 返回变量的尾。
:gr 返回所有的根。
:ge 返回所有的扩展。
:gh 返回所有的头。
:gt 返回所有的尾。
:q 将一个单词列表变量引起来,将其各部分分隔开。当变量中包含不应进行扩展的文件名元字符时,该选项比较有用。
:x 将一个模式引起来,并将它扩展成单词列表。
set aa=(/progs/num.c /book/chap.ps)变量部分 格式 输出结果
正常变量 echo $aa /progs/num.c /book/chap.ps
第二个根 echo $aa[2]:r /book/chap
第二个头 echo $aa[2]:h /book
第二个尾 echo $aa[2]:t chap.ps
第二个扩展 echo $aa[2]:e ps
根 echo $aa:r /progs/num /book/chap.ps
全部根 echo $aa:gr /progs/num /book/chap
头 echo $aa:h /progs /book/chap.ps
全部头 echo $aa:gh /progs /book
尾 echo $aa:t num.c /book/chap.ps
全部尾 echo $aa:gt num.c chap.ps
扩展 echo $aa:e c /book/chap.ps
全部扩展 echo $aa:ge c ps
数组
- 定义数组myarr, 通过$myarr[index]来访问数组中的值,注意index是从1开始的。
- 通过$myarr或$myarr[*]来访问数组所有的元素。
- 通过$#myarr来查看元素的个数。
set myarr = (str1 str2 str3)unset myarr[1] #删除str1
unset myarr #删除整个数组echo $myarr[2] # echo $myarr echo $myarr[*]set ttt = (`eval 'find ./testdata -type d -name "$myarr[1]*"'`) #find的返回值是数组的元素
表达式
表达式用于在@(C shell 数学运算符)、if 和while 语句中执行算术运算、字符串
比较、文件测试等。exit和set 也能指定表达式。
运算符描述 描述
= 赋值
+= -= 在加/ 减后重新赋值
*= /= %= 在乘/ 除/ 求余后重新赋值
&= ^= |= 在对位进行AND/XOR/OR 后重新赋值
++ 递增
-- 递减
* / % 乘;整除;求余
+ - 加;减
~ 二进制求反(二进制反码)
! 逻辑非
<< >> 位左移;位右移
& 按位与
^ 按位异或
| 按位或
&& 逻辑与(短路操作)
|| 逻辑或(短路操作)
{command} 如果命令成功,则返回1;否则返回0。注意,这个情况和command 的
正常返回码是不一样的。$status 变量可能更实用一些
== != 相等;不等
<= >= 小于或等于;大于或等于
< > 小于;大于
=~ 左边字符串匹配一个包含*、?或[...]的文件名模式
!~ 左边字符串不匹配一个包括*、?或[...]的文件模式
@ x = ($n > 10 || $n < 5) #对变量$x赋值,注意@和x之间有空格
@ x = ($n >= 0 && $n < 3) @ cnt = $cnt + 1 #$cnt 自增1
如下写法不可行
while($seed_num == $round_cnt * 10)echo "ha"end
应改为
set temp = 0;
@ temp = $round_cnt*10;
while($seed_num == $temp)echo "ha"
end
命令替换
通过set x = `cmd`来执行命令,且结果赋值给变量。
set d = `date`echo $d # echo $d[6]-$d[2]-$d[3]
命令行参数
- 通过$argv[1],$argv[2]或$1,$2来访问命令行参数。
- 命令行参数的个数为$#argv。
命令方式
cmd1 && cmd2
- 逻辑与关系,执行cmd1(如果cmd1 执行成功)后再执行cmd2。
- 这是一种短路操作,如果cmd1 没有成功执行,cmd2 将永远不能执行。
cmd1 || cmd2
- 逻辑或关系,执行cmd1 或(如果cmd1 执行失败)cmd2;
- 这是一个短路操作,如果cmd1 执行成功,cmd2 将永远不能执行。
控制流
(1) label 和 goto
goto label......label:....
(2)if/else/switch/case
if(xxx) thencommandsendif
if (xxx) thencommandselse if (xxx) thencommandselsecommandsendif
switch("$value")case pattern1: commands1 breakswcase pattern2: commands2 breakswdefault: commands breakswendsw
while(xxx)commandscontinuebreakend
foreach var (wordlist)commandsend
repeat 3 "echo helloworld"
break: 继续执行距离while 或foreach 最近的、在end 命令后的命令。
breaksw : 终止一个switch 语句,然后继续执行endsw 之后的命令。
eval args
一般地,eval用于shell 脚本中,并且args 是一行包含了shell 变量的代码。eval首先强制变量扩展,然后运行生成的命令。
当shell 变量包含了输入/ 输出重定向符号、别名或其他shell 变量的时候,这种两次搜索是有用的。(例如,正常情况下重定向发生在变量扩展之前,因此一个包含了重定向符号的变量必须首先用eval扩展,否则会无法解释那个重定向符号。
set b='$a'
set a=hello
echo $b 读命令行一次
$aeval echo $b 读命令行两次
hello#################################################set pwa_name = dut_`date -d "1 day ago" +%m%d`set job_name = `eval 'grep -E -o "JOB\.${pwa_name}.*[0-9]{6} " ./a.log'`eval 'find ./ -type d -name "$testcase_arr[$loop_cnt]*" | head -n 10 | xargs -i cp -rf {} ./testdata/'eval 'find ./ -type d -name "$testcase_arr[$loop_cnt]*" -exec cp -rf {} ./testdata/ \;'
文件操作
-操作符 filename
-e 文件存在返回1(.true.), 否则返回0(.false.).
-r 文件可读返回1,否则返回0.
-w ....可写................
-x ....可执行...............
-o 文件属于用户本人返回1, 否则返回0.
-z 文件长度为0返回1, 否则返回0.
-f 文件为普通(plain)文件返回1, 否则返回0.
-d 文件为目录文件时返回1, 否则返回0
正则匹配
if ($file !~ *.[zZ]) 如果文件不是以.z或.Z为结尾⋯⋯
if ($argv[1] =~ chap?) 如果第一个参数是chap 后跟着一个单字符⋯⋯
命令替代
! 开始一个历史替代
!! 先前命令
!N 历史表中第N 条命令
!-N 从当前命令开始往后第N 条命令
!string 以string 开始的最近的命令
!?string? 包含了string 的最近的命令
!?string?% 包含了string 的最近命令参数
!$ 先前命令的最后一个参数
!!string 上一条命令,然后追加string
!N string 第N 条命令,然后追加string
!{s1}s2 以字符串s1 开始的最近的命令,然后追加字符串s2
^old^new^ 快速替代,在先前命令中将字符串old 改成new,执行修改后的命令
历史修饰符
可以通过一个或多个修饰符来修饰命令替代和单词替代:
输出、替代和引用
:p 只显示命令但不执行。
:s/old/new 用字符串new 替代old,只影响第一个实例。
:gs/old/new 用字符串new 替代old,适用于所有的实例。
:& 重复先前的替代(:s 或^ 命令),只影响第一个实例。
:g& 重复先前的替代,适用于所有实例。
:q 将一个单词列表引起来。
:x 将分隔的单词引起来。
【shell】Cshell相关推荐
- 【shell】常用语法 -b file -c file -f file-d file -x file
[shell]常用语法 -b file -c file -f file-d file -x file 一.test条件判断 1,test文件测试: -b file 若文件存在且 ...
- 【Shell】awk命令--输出某列,列求和,列求平均值,列最大值,列去重复,取倒列,过滤行,匹配,不匹配,内置变量|定义分隔符|多个分隔符...
目录 awk基本语法 awk输出某几列 awk遍历文件行处理 awk中运行shell命令 方法1:awk 内置函数system 方法2 通过awk print 交给bash awk中运行shell命 ...
- linux 脚本 $? -ne 0是什么意思,【shell】linux之if [ $? -ne 0 ];-ne 表示 不等于,参考shell中运算符整数比较
$# 是启动脚本时携带的参数个数 -ne 是不等于 这个语句的意思是"如果shell的启动参数不等于1个" $# 表示提供到shell脚本或者函数的参数总数: $1 表示第一个参数 ...
- 【shell】笔记|去重复行|删除匹配行|反选删除|反向显示|加减乘除
目录 配置 bash Shell忽略命令大小写 |按"上"键显示该命令的历史 shell 删除匹配行 shell 获取结果中的第n列,第n行 grep过滤 shell 注释块 Li ...
- linux 脚本 $? -ne 0是什么意思,【shell】linux之if [ $? -ne 0 ];
[shell]linux之if [ $? -ne 0 ]; 1年前 (2019-11-19) 作者:Jiaozn 分类:Shell 阅读次数:868 评论(0) $# 是启动脚本时携 ...
- 【Shell】判断是否包含给定字符串
目录 Shell判断字符串包含关系的几种方法 shell中[ ]和[[]]的区别 格式匹配 作者:bandaoyu 链接:https://blog.csdn.net/bandaoyu/article ...
- 【shell】shuf命令提取文件的随机行
[shell]shuf命令提取文件的随机行 shuf命令可以随机提取一个文本文件的不同行,输出到文件或者标准输出中. shuf用法: shuf [选项]... [文件]或者: shuf -e [选项] ...
- 【shell】shell字符串分割|文件分割|剪切|截取
目录 一.字符串分割 1.awk分割 2.利用shell 中 变量 的字符串替换成空格分割 3.设置分隔符,通过 IFS 变量 4.利用tr 指令实现字符替换 二.文件分割 按行切割 按时间切割(符合 ...
- 【shell】linux输出重定向|输出重定向2>1
目录 即看即用 详细 知识铺垫 说明 [shell]输出重定向2>&1 即看即用 标准输出: ls thereisno 1> out.txt 标准输出重定向 也可以不加1写成 ...
最新文章
- 淘宝Tengine服务器开源
- 千万用户同时在线,优酷智能档在双11“猫晚”直播如何防卡顿?
- [2015-11-10]iis远程发布配置
- python将姓王的都改成老王_Python老王视频习题答案
- JS判断日期是否在同一个星期内,和同一个月内
- NB贝叶斯平凡而又神奇的贝叶斯方法
- 你应该知道的一些 ADB 命令
- 幼儿园学校网站JAVA_基于jsp的幼儿园网站-JavaEE实现幼儿园网站 - java项目源码
- 需求与商业模式分析-1-商业模式画布
- android变化HOLO对话风格
- 正态总体均值假设检验
- 百度地图的一些踩坑 marker网络图片不显示
- 41岁职场中年人深度劝告:一定要从小公司往大公司走
- PC微信本地图片格式转化
- Hangfire 使用笔记
- java监听器(Listener)统计在线人数
- esp8266之Arduino的mqtt客户端远程继电器控制,断电重连、断网重连,断mqtt服务器重连
- 画思维导图的三招十八式
- R232接口的简单介绍
- html5国际证书,免费获得微软MCSD证书赶快行动吧!
热门文章
- 控件的颜色设置(本景色,文本色,文本背景色)
- 生鲜配送APP软件开发快速制作
- 消费金融进入“第二赛段”,突围关键是什么?
- 程序员通过google 赶快来赚美金~ hot
- 微信支付 商户号该产品权限未开通,请前往商户平台
- linux xxx命令,linux命令ps aux|grep xxx详解
- h5php大转盘抽奖,html5的非常简单圆形转盘抽奖代码
- vmware虚拟机桥接模式在有线/无线双网卡解决方案
- 开源可协作在线文档(ShowDoc)
- 深圳中学招聘太激烈,不是名校博士别想挤破头进去!