当前位置:天生赢家凯发k8国际-凯发k8国际唯一 > 范文大全

shell评估中心最后一面 -天生赢家凯发k8国际

时间:2023-03-26 19:06:54 作者: 字数:3107字

问个小问题,shell如何输出最后一个参数

#!/usr/bin/ksh

cal_id=1

num_count=10

max_num=-99999

min_num=-99999

while [ $cal_id -le $num_count ]

do

read line

if [ $cal_id -eq 1 ] ; then

min_num=$line

fi

if [ $line -ge $max_num ] ; then

max_num=$line

fi

if [ $line -le $min_num ] ; then

min_num=$line

fi

cal_id=`expr $cal_id 1`

done

clear

echo $max_num

echo $min_num

基本上没有问题了

shell脚本取重复数据的最后一条记录

假设你这个.unl文件叫 file.unl,并且内容不含斜杠 / 。

脚本大致如下:

#!/bin/bash

myfile=file.unl

touch tmp

while read line

do

grep "$line" tmp /dev/null 21

if [ $? -eq 0 ]; then

num=`awk '{print $nf}' tmp`

num=`expr $num 1`

sed -i “s/^($linet)[0-9]*$/1$num/” tmp

else

echo -e "$linet1" tmp

fi

done $myfile # --- 1), 2)

awk '$nf1{print}' tmp err.unl # --- 3)

sed -i 's/^(..*)t[0-9]*$/1/' tmp

mv -f tmp $myfile # --- 4)

exit 0

思路就是,

1)遍历 unl 文件的每一行,逐行拷贝一份到临时文件tmp中,后面附加一个出现的次数。

2)遍历的同时到tmp文件中去查找是否有已存在的相同记录,如果有,就只是更新tmp文件中记录的次数而不添加一个新记录。

3)最后根据tmp文件中记录的次数是否大于1来生成err.unl文件,记录重复的行及总共出现的次数。

4)将tmp文件中的次数记录去除即得到更新后的 unl 文件。

由于要求要覆盖原unl文件,所以这里存在风险。 建议运行脚本前先备份一下原unl文件。

最后,恕我直言,这个题目的难度不止10分。

你看,while循环,grep / sed / awk,全用上了 ^_^

————————————————————————————————————

发现一个更简练的方法,两条命令即可搞定:

awk '{s[$0] =1} end{for(a in s) print a, s[a]}' file.unl err.unl

awk '{print $1}' err.unl file.unl

当然,前提是unl文件的每行内容不能含有空格或tab之类的分隔符。

参考了 这个问题中shuguangbo童鞋的回答。

如何获取传入给shell脚本的最后一个参数

执行“nano test.sh”创建一个新的shell脚本。

脚本test.sh的内容如下:

#!/bin/sh

name=$1

echo "the ${name} are great man!"

给新创建的test.sh的脚本赋可执行权限,命令为“chmod 755 test.sh”。

执行'./test.sh "xiao wang"'命令,可以看到自己编写脚本的结果“the xiao wang are great man!”。

5

"name=$1"中$1为系统提供的位置参数,$0代表程序的名称,[$1/$2/...]从1开始为传递的参数。

6

linux系统除了提供位置参数还提供内置参数,内置参数如下: 

$# ----传递给程序的总的参数数目  

$? ----上一个代码或者shell程序在shell中退出的情况,如果正常退出则返回0,反之为非0值。

$* ----传递给程序的所有参数组成的字符串。

$n ----表示第几个参数,$1 表示第一个参数,$2 表示第二个参数 ... $0 ----当前程序的名称

$@----以"参数1" "参数2" ... 形式保存所有参数

$$ ----本程序的(进程id号)pid

$! ----上一个命令的pid

网站地图