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

article/2025/9/21 23:34:09

文章目录

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

前言

Shell 编程能提升我们工作效率,但 bash 和 csh 有一定的区别。下面将整理两者不同,以及常用的语法经验。具体代码可以去我的GitHub下载。

1. 变量和环境变量设置

1. csh

set x = 1
echo $xsetenv MATH true

2. bash

x=1
echo $xMATH=true
export MATH=true
echo $MATH

2. if语句

1. csh

if (2 != 3 ) then           echo "2 != 3"                               
endif

2. bash

if [[ 2 != 3 ]];thenecho "2 != 3"
fi

3. while循环

1. csh

set sum = 0
set i = 1
while ($i <= 10)set sum = `expr ${sum} + ${i}`set i = `expr ${i} + 1`
end
echo 'sum = '$sum

输出:sum = 55

2. bash

i=1
sum=0
while [[ $i -le 10 ]] 
do((sum += i))let i++
done
echo 'sum = '$sum

输出:sum = 55

4. 数组

1. csh

echo 'array_start'
set array = (5, 4, 3, 1, 2)               
echo $#array                                     
foreach i (${array[*]})echo $i
end
echo 'array_end'

输出:
在这里插入图片描述

2. bash

echo 'array_start'
array=(5 4 3 1 2)
echo ${array[@]}
for i  in  ${array[@]}; doecho $i
done
echo 'array_end'

输出:
在这里插入图片描述

5. 获取当前文件路径

1. csh

#!/bin/csh
#Method 1
set script_dir=`readlink -f -- "$0"`
set CURDIR=`dirname -- $script_dir`
echo $CURDIR#Method 2
set root=`pwd`
echo $root

2. bash

#!/bin/bash
#Method 1
CURDIR=$(cd $(dirname ${BASH_SOURCE[0]}); pwd )
echo $CURDIR#Method 2
root=`pwd`
echo $root

6. 获取当前时间

1. csh

#!/bin/csh
set ddate=`date`
echo $ddate

2. bash

#!/bin/bash
date=$(date)
echo $date 

7. 产生随机数并测试

1. csh

#!/bin/csh 
set extraRatio = 10set sum = 0
set ij = 1
while ($ij <= 100)set rand = `date +%N`set rand100 = `expr ${rand} % 100`if ( `expr ${rand100}` < ${extraRatio} ) thenset sum = `expr ${sum} + 1`endifset ij = `expr $ij + 1`
endecho ${sum}

2. bash

#!/bin/bashextraRatio=10
sum=0
ij=0
#echo $ij
while [[ $ij -le 100 ]]
dorand=`date +%N`#echo $randrand100=`expr ${rand} % 100`#echo $rand100if [[ ${rand100} -le ${extraRatio} ]]; then((sum += 1))filet ij++
doneecho 'sum = '$sum

8. 补充

1. 查看系统默认用的 Shell

echo $SHELL

2. 查看系统所拥有的 Shell

cat /etc/shells


http://chatgpt.dhexx.cn/article/vLGCwqwj.shtml

相关文章

矩阵转置基本性质

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

Maple: 矩阵转置

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

5*5矩阵转置

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

矩阵转置输出

输入样例 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框; (初始化值) 第四个框由于是让我们自己输…

androidstudio将modle导入项目里,实现:在本地项目里调用modle里面的方法

1.导入Modle&#xff1a; File-new-ImportModle-找到modle文件- 接下来一路确定即可 2、将本地项目与modle关联 File-Project Structure-app(本地项目)-Dependences-点绿色的加号-Module dependency-选择要加入的项目即可 3、如果步骤2执行完报 unspecified on proje…

C++开发UDP通信:使用socket创建UDP服务器端和客户端

我的主页视频讲解 博客不经常在线&#xff0c;私信请到西瓜视频搜索“智能之心”&#xff0c;以智能之心赴智能之梦。 UDP通信步骤 引用UDP通信步骤 一、UDP套接字服务端架构步骤 1&#xff0e; //初始化套接字环境WSAStartup 2&#xff0e; //初始化地址和端口 3&#xff0e…