【shell】C shell

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/lbt_dvshare/article/details/94170199

csh -vx 用来显示输入的原样和变量替换后的脚本,用来帮助调试。

变量

  • 通过set来定义局部变量x,通过$x(或${x})来使用变量x的值;
  • $%x  表示变量的值的长度
  • $?x   来判断变量x是否设置,如设置则为1,否则为0;
set x = 5
 
echo ${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)
 
​echo $myarr[2]    # echo $myarr  echo $myarr[*]

命令替换

     通过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) then
 
   commands
 
 endif

  if(xxx) then
 
    commands
 
  else if(xxx) then
 
    commands
 
  else
 
    commands
 
  endi
switch("$value")
 
  case pattern1: commands1  breaksw
 
  case pattern2: commands2  breaksw
 
  default: commands  breaksw
 
endsw

while(xxx)
 
  commands
 
  continue
 
  break
 
end

foreach var (wordlist)
 
  commands
 
end
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 读命令行一次
$a

eval echo $b 读命令行两次
hello

文件操作

   -操作符 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
 

猜你喜欢

转载自blog.csdn.net/lbt_dvshare/article/details/94170199