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
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值