Bash与Csh的区别

article/2025/9/21 23:35:53

zz :http://dangdanding.blog.163.com/blog/static/27992981201262595221896/

一、csh的while循环控制结构及if then:
#!/bin/csh -f
while ($#argv >= 1)
  if ("$1" == "-s") then
    shift
    if ($#argv >= 1) then
      set source = $1
      shift
    endif
  else if ("$1" == "-c") then
    set complex = "-text"
    shift
  else
    if ($?text == "0") then
      set text = $1
    endif
    shift
  endif
end

而bash的for结构的if then :
#!/bin/sh
for file in *
do
   if grep -q POSIX $file
   then
      echo $file
   fi
done
exit 0
即c语言风格的csh,如if endif, while end结对,而linux下的bash形式为 if  fi,  for  do done.

比较二:
csh的判断文件存在:
if (-e $MGDATA/${text}.chunks) then
  set input_files = `cat $MGDATA/${text}.chunks`
endif

而bash则是:
if test -f fred.c
then
...
fi
或者使用
if [ -f fred.c ]
then
...
fi
即方括号[]相当test命令的效果,注意:如果需要把then放在if的同一行,需要在方括号[]后加一个分号;
if [ -f fred.c ]; then
...
fi


zz:http://bdxnote.blog.163.com/blog/static/8444235200710991136102/

==========BASH中的条件表达式=========================
Bash中测试条件表达式时可以使用test命令或"[]",test命令与"[]"的功能是等价的,bash把"[]"的实现连接到test命令
上的."[]"中的条件表达式与"["和"]"之间都必须有至少一个空格.如: [ 2==2 ],否则bash解释器不于通过执行.
文件比较运算符
[ -e filename ]  如果filename存在,则为真             [ -e /var/log/syslog ]
[ -d filename ]  如果filename为目录,则为真          [ -d /tmp/mydir ]
[ -f filename ]   如果filename为常规文件,则为真    [ -f /usr/bin/grep ]
[ -L filename ]  如果filename为符号链接,则为真    [ -L /usr/bin/grep ]
[ -r filename ]   如果filename可读,则为真             [ -r /var/log/syslog ]
[ -w filename ]  如果filename可写,则为真             [ -w /var/mytmp.txt ]
[ -x filename ]  如果filename可执行,则为真          [ -L /usr/bin/grep ]
[ filename1 -nt filename2 ] 如果filename1比filename2新,则为真  [ /tmp/install/etc/services -nt /etc/services ]
[ filename1 -ot filename2 ] 如果filename1比filename2旧,则为真  [ /boot/bzImage -ot arch/i386 ]
字符串比较运算符(请注意引号的使用,这是防止空格扰乱代码的好方法)
[ -z string ] 如果string长度为零,则为真  [ -z "$myvar" ]
[ -n string ] 如果string长度非零,则为真  [ -n "$myvar" ]
[ string1  = string2 ] 如果string1与string2相同,则为真  [ "$myvar" = "one two three" ]
[ string1 != string2 ] 如果string1与string2不同,则为真  [ "$myvar" != "one two three" ]
算术比较运算符  
[ num1 -eq num2 ]  等于         [ 3 -eq $mynum ]
[ num1 -ne num2 ]  不等于       [ 3 -ne $mynum ]
[ num1 -lt num2 ]  小于         [ 3 -lt $mynum ]
[ num1 -le num2 ]  小于或等于   [ 3 -le $mynum ]
[ num1 -gt num2 ]  大于         [ 3 -gt $mynum ]
[ num1 -ge num2 ]  大于或等于   [ 3 -ge $mynum ]
===============CSH中的条件表达式==========================
字符串比较  功能
==    是否相等,若相等返回真
!=     是否不等,若不等返回真
=~     字符串和模式进行测试是否相等(模式为任意正则表达式)
!~     字符串和模式测试是否不等(模式为任意正则表达式)
文件测试  功能
-e     测试文件是否存在
-r      测试文件是否可读
-w     测试文件是否可写
-x      测试文件是否可执行
-d      测试文件名是否为目录
-f       测试文件是否为普通文件
-o      测试文件是否被用户所拥有
-z      测试文件是否为空
逻辑运算符   功能
&&    与运算,两个条件同时蛮族
||       或运算,有一个条件满足
!       取反
注意:bash与csh都支持位运算


变量

变量:CSHBASH
给局部变量赋值set x=1x=1
给环境变量赋值 setenv NAME tomNAME=tom
export NAME 
引用(存取)变量echo $NAME  
$set var=hello          
$echo ${var},tom        
hello,tom
echo $NAME
var=hello  
$echo ${var},tom  
hello,tom 
专用变量:退出状态$status$?
把命令输出赋给变量   set d=`date`d=`date`  
d=$(date) 
   


各个shell的链接:



http://chatgpt.dhexx.cn/article/2P33mljn.shtml

相关文章

CSH脚本学习

CSH脚本学习笔记(不常见的命令用法) csh中的 > ! 命令与bash中的> 和>| 命令相同,都是写入文件内容。但在bash中表示没有文件则不创建文件。 foreach var ( list ) command end 是CSH脚本中的循环命令,将list的值逐一赋值给变量var…

Shell编程之Csh和Bash的经验总结

文章目录 前言1. 变量和环境变量设置1. csh2. bash 2. if语句1. csh2. bash 3. while循环1. csh2. bash 4. 数组1. csh2. bash 5. 获取当前文件路径1. csh2. bash 6. 获取当前时间1. csh2. bash 7. 产生随机数并测试1. csh2. bash 8. 补充1. 查看系统默认用的 Shell2. 查看系统…

矩阵转置基本性质

一个矩阵的转置与本身相乘得到对称矩阵 一个矩阵的逆矩阵与本身相乘得到单位矩阵 行列式不等于零,矩阵可逆,反之不可逆 满秩矩阵一定是可逆的

Maple: 矩阵转置

在Maple中用%T的命令执行矩阵转置,具体效果如下

5*5矩阵转置

编写程序:对一个5X5的二维整型数组转置,即行列互换。 要求从键盘输入数组的值,输出转置前及转置后的结果。 如: 输入格式: 输入数组前有如图示的提示; 输出格式: 输出转置前及转置后的结果,输出前有提示…

矩阵转置输出

输入样例 3 2 1 2 3 4 5 6 #include<stdio.h> int main() {int m,n;int a[15][15]{0};//二维数组int i,j;scanf("%d %d",&m,&n);for(i0;i<m;i)for(j0;j<n;j)scanf("%d",&a[i][j]);//先全部输入再进行其他操作for(i0;i<m;i){for…

c语言函数矩阵转置代码,C语言实现矩阵转置

讲解对象&#xff1a;C语言实现矩阵转置 作者&#xff1a;融水公子 rsgz 1随机函数生成矩阵 #include #include #include int main(){ int i,j; int a[5][3]; printf("生成矩阵:\n"); //srand(time(NULL)); for(i0;i<5;i){ for(j0;j<3;j){ a[i][j]rand()%20; }…

vue报错:Failed to resolve directive: modle

问题原因&#xff1a;我把model写成了modle

[Vue warn]: Failed to resolve directive: modle (found in ComponentA)

报错原因&#xff1a;单词拼写错误 解决方法&#xff1a;检查是否将model写成了modle 温馨提示&#xff1a;编写代码要细心且严谨&#xff08;这已经是我第二次犯类似的错误了&#xff09;

Proteus找不到模型文件 Could not find the modle file

这一部分和你Proteus的文件夹地址一样 这些也要一样 且安装路径需要选择英文路径 同理 最后再用管理员模式打开一下就可以了。。。&#xff08;这些都是弱智问题&#xff09;&#xff08;我是弱智&#xff09;

Vue:解决[Vue warn]: Failed to resolve directive: modle (found in Anonymous)

解决问题 [Vue warn]: Failed to resolve directive: modle (found in <ComponentA>) console.error(("[Vue warn]: " msg trace)); 原因是 我把model 写成了 modle 这类错误一般是单词写错了 (found in <Anonymous>) 解决思路

modle bulinder 实践1.Excel坐标转面

1.结果&#xff1a; 1.工具放在内存里可以加快运行速度 2.步骤 a.Excel转表工具 b.创建XY事件图层&#xff08;选用投影坐标系--高斯克吕格-CGCS2000-34坐标系&#xff09; c.筛选工具<生成的是临时表&#xff1b;点转线需要真实存在的表&#xff1b;故进行筛选&#xf…

vue v-modle修饰符.number .trim

语法糖&#xff1a; 在不影响功能的情况下&#xff0c;添加某种方法实现同样的效果&#xff0c;从而方便程序开发。 .number&#xff1a;可以将输入转换成Number类型&#xff0c;否则虽然输入的是数字&#xff0c;但它的类型其实是String。 .trim&#xff1a;自动过滤输入的首尾…

Android Studio 导入modle是提示名称已存在

最近在做项目的时候&#xff0c;使用到别人的东西&#xff0c;就引入的相应的Modle&#xff0c;引入成功后。第二天打开项目的时候发现前一天引入的Modle不见了&#xff0c;再次引入的时候提示该Modle的名称已经存在&#xff1b;我查理一下资料解决方法如下&#xff1a; 其实Mo…

Action层, Service层 ,modle层 和 Dao层详解

一、SSH架构最基本的分层方式&#xff1a; modle层&#xff1a;就是对应的数据库表的实体类&#xff0c;即将现实对象抽象成类。 Dao层&#xff1a;是使用了Hibernate连接数据库、操作数据库&#xff08;增删改查&#xff09;和model层。 Service层&#xff1a;引用对应的Dao数…

AndroidStudio如何删除Modle

1、 2、 3、编译之后就可以了

【Django】admin的save_modle方法重写-20220803

重写代码&#xff1a;加入if change 和logger def save_model(self, request, obj, form, change):if change:print(self,self)print(request,request)print(obj,obj)print(form,form)print("form.cleaned_data[project_name]",form.cleaned_data[project_name])prin…

有包但import时pycharm提示No Modle name

已经安装了Anaconda。在我重新安装pycharm后&#xff0c;将原来的写的代码导入编写界面&#xff0c;在import处发现有红色波浪线&#xff0c;提示我没有这个包。但是用pip list命令查看发现包已经安装。后来发现是在配置编译器环境的时候路径不是Anaconda文件目录下的&#xff…

vue中用v-modle绑定input来实现百分比的计算

首先我们需要用v-model绑定一个参数,前三个input框用disabled禁止输入,然后我们分别给它们初始化一个值,第三个不需要赋值,此处是我们进行百分比计算的,所以我们可以先给一个undefined; 我们给第四个input框用v-bind(简写为)绑定input框; (初始化值) 第四个框由于是让我们自己输…