Bash 如何将变量重定向到文本文件中,然后按字母顺序排序
我的脚本要求每次输入1个大写字母,以0结尾。需要显示无效输入,并显示第一个有效大写字母Bash 如何将变量重定向到文本文件中,然后按字母顺序排序,bash,alphabetical,Bash,Alphabetical,我的脚本要求每次输入1个大写字母,以0结尾。需要显示无效输入,并显示第一个有效大写字母 #! /bin/sh count=0 until [[ $n =~ 0 ]]; do echo Inputs: read n if [[ $n =~ ^[A-Z]$ ]]; then count=`expr $count + 1` echo $n | sort > out.txt fi done echo The total numbe
#! /bin/sh
count=0
until [[ $n =~ 0 ]]; do
echo Inputs:
read n
if [[ $n =~ ^[A-Z]$ ]]; then
count=`expr $count + 1`
echo $n | sort > out.txt
fi
done
echo The total number of valid input letters:
echo $count
echo " "
echo The first valid input:
head -n 1 /filepath/out.txt
输出:
Inputs:
B
Inputs:
A
Inputs:
C
Inputs:
0
The total number of valid input letters:
3
The first valid input:
C
Inputs: B
Inputs: A
Inputs: C
Inputs: 0
The total number of valid input letters:
3
The first valid input:
A
问题:它应该导致A。
任何帮助都将不胜感激。此行:
echo $n | sort > out.txt
始终仅使用最新输入来清除文件out.txt
。也许你应该使用:
cp /dev/null out.txt # Before the loop
echo $n | sort -o out.txt out.txt -
cp
命令创建一个空文件。sort
命令读取现有文件out.txt
及其标准输入(新行),对结果进行排序并将其写入out.txt
对于短输入,这是正常的;如果它需要扩展到数千行,那么它的效率不是很高
此外,在Bash中,不需要使用expr
进行算术运算:
((count++))
使用以下代码
#! /bin/sh
count=0
>out.txt
until [[ $n =~ 0 ]]; do
read -p 'Inputs: ' n
if [[ $n =~ ^[A-Z]$ ]]; then
count=`expr $count + 1`
echo $n >> out.txt
fi
done
echo The total number of valid input letters:
echo $count
echo " "
echo The first valid input:
sort out.txt |head -n 1
输出:
Inputs:
B
Inputs:
A
Inputs:
C
Inputs:
0
The total number of valid input letters:
3
The first valid input:
C
Inputs: B
Inputs: A
Inputs: C
Inputs: 0
The total number of valid input letters:
3
The first valid input:
A
因为您只需要最小的(字母顺序)有效输入,所以不需要排序。这里有一个替代答案,不使用排序,只保留最小的有效输入:
#!/bin/sh
count=0
until [[ $n =~ 0 ]]; do
echo Inputs:
read n
if [[ $n =~ ^[A-Z]$ ]]; then
((count++))
if [ -z $first ] || [ `expr $n \< $first` -eq 1 ]; then
first=$n
fi
fi
done
echo The total number of valid input letters:
echo $count
echo " "
echo The first valid input:
echo $first
#/垃圾箱/垃圾箱
计数=0
直到[[$n=~0]];做
回波输入:
阅读
如果[[$n=~^[A-Z]$];然后
((count++)
如果[-z$first]|[expr$n\<$first`-eq 1];然后
第一名=$n
fi
fi
完成
回显有效输入字母的总数:
echo$count
回声“”
回显第一个有效输入:
echo$first