CSH 入门基础 1 -- bash与 csh 差异 及csh常用语法介绍


请阅读【CSH及SHELL学习专栏】


下篇文章:CSH 入门基础 2 – csh(C Shell)对文件/目录的判断及对参数的处理

CSH 背景

C Shell(csh)是一种Unix shell,由Bill Joy在1978年开发。它是BSD操作系统中的默认shell,也被许多其他Unix操作系统所采用。C Shell的语法和功能相对于Bourne shell(sh)有很大的不同,特别是在脚本编程方面。C Shell提供了许多高级功能,如命令行编辑、命令别名、历史记录、作业控制和脚本编程等。虽然C Shell在过去受到很多批评,但它仍然是许多Unix用户和管理员喜欢使用的一种shell。

1.1.1 CSH 与 BASH 差异

bash 的 shell 默认用户下面的配置文件是:.bashrc, 用户登陆之后,默认执行该配置文件内容,让环境变量生效;
csh 的 shell 默认用户下面的配置文件是:.cshrc, 用户登陆之后,默认执行该配置文件内容。

两者主要有以下区别

  • alias 命令使用差异:
    • csh 中不使用 = 号,如 alias g "gvim"
    • bash 中使用 =
  • 环境变量PATH 设置差异:
    • csh 对于环境变量 PATH 的配置 不能使用 ~ 符号,需要使用绝对路径,如:setenv PATH "${PATH}:/home/xxx/bin"
    • bash 可以使用 ~
  • 变量设置差异:
    • csh 设置变量时使用 set 命令,并且=号两边不能有空格,如 set a=pwd
    • bash 设置变量时不需要 set 命令,并且=号两边必须无空格,如 a=pwd
  • 环境变量设置差异:
    • csh 设置环境变量时使用 setenv 命令,如setenv PATH $PATH:/usr/local/bin
    • bash 设置环境变量时使用export 命令,并且=号两边不能有空格,如export PATH=$PATH:/usr/local/bin
  • $ 使用差异:
    • csh 引用变量时使用$符号,并且可以省略{}符号,如echo $a
    • bash 引用变量时也使用 $ 符号,但是如果变量名后面紧跟其他字符,则必须加上{}符号以区分变量名和其他字符,如 echo ${a}b

1.1.2 CSH IF 语句

condition是一个条件表达式,当其为真时,if语句块中的命令会被执行。如果condition为假,则会继续执行下一个else if语句块,直到找到一个条件为真的语句块,或者执行到最后的else语句块。

以下是一个使用if语句在csh中判断一个数是否为偶数的示例:

csh #!/bin/csh

set num = 6

if ($num % 2 == 0) then 
	echo "$num is even" 
else 
	echo "$num is odd" 
endif

在这个示例中,条件表达式是$num % 2 == 0,如果$num除以2的余数为0,则条件为真,输出"$num is even"。否则,输出"$num is odd"。

其它例子
执行 vusage 命令后,使用 awk 命令打印第二行,使用cut命令只取第40个字符,
判断该字符是否是“1”, 如果不是“1” 会进行 sleep 5s的操作。

#!/bin/csh

set avail=`vusage | awk 'NR==2 {print}' | cut -c 40` 
# if ( 1 ) then;
if ( $avail >= 1) then;
	echo "there are enough board for test, doing test..."
else
	sleep 5
endif

1.1.3 CSH While 语句

#!/bin/csh

while (1)
  body
end
#!/bin/csh

set i = 1
while ($i < 5)
   echo "i is $i"
   @ i++
end

or
在这个示例中,循环体中的命令是输出变量i的值,并将i的值加1。当i的值小于5时,循环体中的命令会被重复执行。最终输出的结果是1到5的数字序列。

#!/bin/csh

set i = 1
while (1)
    echo "i is $i"
    @ i++
    if ($i >= 5) break
end

These output:

i is 1
i is 2
i is 3
i is 4

1.1.3 CSH Switch 语句

以使用csh中的switch语句来实现多分支条件判断。具体语法如下:

switch (variable) 
case value1: 
	command1 
	command2 ... 
	breaksw 
case value2: 
	command3 
	command4 ... 
	breaksw ... 
default: 
	command5 
	command6 ... 
endsw 

其中,variable是一个变量,需要被匹配到某个值。如果 variable 的值等于某个 case 的 value,那么该 case 中的命令会被执行。如果没有匹配到任何一个case,那么会执行default中的命令。

csh #!/bin/csh

set num = 5

switch ($num) 
case 1: 
	echo "The number is 1" 
	breaksw 
case 2: 
	echo "The number is 2" 
	breaksw 
case 3: 
	echo "The number is 3" 
	breaksw 
default: 
	echo "The number is greater than 3" 
endsw 

在这个示例中,判断$num的值,

  • 如果$num等于1,输出"The number is 1",
  • 如果$num等于2,输出"The number is 2",
  • 如果$num等于3,输出"The number is 3",
  • 否则输出"The number is greater than 3"。

可以通过下面命令来执行CSHELL 脚本:

chmod +x myfile.csh
csh myfile.csh or myfile.csh or ./myfile.csh

下篇文章:CSH 入门基础 2 – csh(C Shell)对文件/目录的判断及对参数的处理


推荐阅读
https://people.math.sc.edu/Burkardt/examples/c_shell/c_shell.html
https://unix.stackexchange.com/questions/392436/how-to-use-while-loop-in-csh-shell-command-prompt

  • 6
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

主公CodingCos

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值