bash和csh的常见用法

Posted 除了心跳都忘掉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bash和csh的常见用法相关的知识,希望对你有一定的参考价值。

文章目录

bash

系统参数

$@
所有参数列表。
$#
添加到Shell的参数个数
$0
Shell本身的文件名
$1~$n
添加到Shell的各参数值。$1是第1参数、$2是第2参数…

$?
最后运行的命令的结束代码(返回值)即执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)

$REPLY
当没有参数变量提供给read命令的时候,这个变量会作为默认变量提供给read命令

数组

bash中数组的用法如下

# 定义数组
arr=(A B C D E)
# 使用下标定义数组
arr[0]=A

# 读取数组
$arr[index]

# 获取数组中所有元素
$arr[@]
$arr[*]

# 获取数组的长度
$#arr[@]

for循环

现在一般都使用for in结构,for in结构后面可以使用函数来构造范围,比如$()、``这些,如果里面写一些查找的语法,比如ls test*,那么遍历之后就是输出文件名了

# 数字性循环
for ((i=0;i<10;i++))
do

done

for i in $(seq 1 10)
do

done

# 字符性循环
for i in $(ls)
do

done

for i in f1 f2 f3
do

done

# 路径查找
for i in $(ls *.txt)
do

done

while循环

bash中while循环的用法如下,另外,给出了一个计算1~100之和的例子

while condition
do
    statements
done

# 1到 100的和
i=1
sum=0
while ((i <= 100))  // 注意这里的判断和计算的语法
do
    ((sum += i))
    ((i++))
done
echo "The sum is: $sum"

awk命令

awk命令的基本流程:
awk [argument] ’
function()
BEGIN

END

  1. function,BEGIN,END都是可选的。
    BEGIN用于设置变量初值,在这里不能使用使用管道传过来的值
    管道传进来的值以空格分割,$i(i=1,2,…)表示取第i个变量的值
    END中的printf,待格式化的字符串和变量间以,相连
    END中的printf 输出完不会自动换行,print会
  2. 的执行方式:
    对输入的每一行(管道传进来的信息按行读取),执行一遍
    BEGIN,END不管有几行都只执行一遍

下面给出了一个在GNSS领域经常用到的计算年积日的bash实现

# 计算年积日
doy=$(echo | awk -v Y=$year -v M=$month -v D=$day '
function isLeapYear(yr)

	if(( yr %4 == 0 && yr %100 != 0 ) || yr %400 == 0)
		return 1
	else
		return 0


sum=0
for(i=1;i<M;i++)
	if(i==2)
		if( isLeapYear(Y) == 1 )
			sum+=29
		else
			sum+=28
	
	else if(i==4 || i==6 || i==9 || i==11)
		sum+=30
	else
		sum+=31

# 这里因为输入只有一行即 只执行一次,所以输出直接写在 里也没关系
print sum+D
')

日期

关于date命令的详细用法,见 date命令
下面给出了一种获取相对当前日期七天前的年月日,因为在GNSS中做事后处理时常需要下载N天前的精密产品

# 获取当前年月日
curYear=$(date +%Y) # %Y : 完整年份 (0000..9999) 四位
curMonth=$(date +%m) # %m : 月份 (01..12) 两位
curDay=$(date +%d) # %d : 日 (01..31) 两位

# 获取七天前的年月日
log=$(date -d"7 day ago $curYear-$curMonth-$curDay" +%Y-%m-%d | tr - ' ')

year=$(echo $log | awk 'print $1')
month=$(echo $log | awk 'print $2')
day=$(echo $log | awk 'print $3')

cshell

foreach

csh中foreach的用法如下,注意第一行的语法即可,()中也可以是$()或``命令

#!/bin/csh
set i=1
foreach solution ('ground_based' 'bias2_ratio0' 'bias2_ratio1')
# also foreach solution (`ls`)
	
	if ($i == 2) then
		continue
	endif
	
	echo $i
	echo $solution
	
	@ i++  # @后面至少一个空格
end

while

csh中while的用法如下

while (condition)
    command1
    command2
    ... ...
    commandn
end

# for example
set count = 0

while ($count < 10)
    echo $count
    @ count++  # @后面至少一个空格
end

以上是关于bash和csh的常见用法的主要内容,如果未能解决你的问题,请参考以下文章

如果内置命令,则检查 bash 和 csh

如何在 bash 中获取 csh 脚本来设置环境 [关闭]

几种常见的Shell

几种常见的Shell

Linux bash介绍与使用

linux bash 入门