我必须在shell(bash)制作一个phone_book ..
这是程序应该做的事情。
添加一个号码:你要求输入名称和号码。如果它已经不存在(验证),那么在名为$ name的同一目录中添加一个文件并包含1行:数字。
获取已保存名称的监听。
我认为我们必须使用我在网上查看的案例,但我对Shell有困难。 希望你帮助我们。不要犹豫,问我问题。感谢
#!/bin/bash
echo " 1)Ajouter une fiche
2)Obtenir la liste des noms déjà enregistrés
3)Chercher un numéro de téléphone
4)Modifier un numero de téléphone
5)Rechercher un nom"
read x
case $x in
1)
echo " Tapez le nom à rajouter"
read nom
touch $nom
;;
更新: 我几乎完成了它,我有一个问题5)当我输入一个存在的数字时,它总是告诉我它不存在..
随意改进我的代码:)
#!/bin/bash
echo " 1)Ajouter une fiche
2)Obtenir la liste des noms déjà enregistrés
3)Chercher un numéro de téléphone
4)Modifier un numero de téléphone
5)Rechercher un nom"
read x
case $x in
1)
echo " Tapez le nom à rajouter"
read nom
while [ -f $nom ]; do
echo "Le fichier existe déjà"
echo " Tapez le nom à rajouter"
read nom
done
touch $nom
echo " Maintenant, tapez le numero de la personne à rajouter"
read numero
echo $numero >> $nom
;;
2)
echo $(ls);;
3)
echo " Tapez le nom de la personne que vous recherchez"
read nomrech
while [ ! -f $nomrech ]; do
echo "Le fichier n'existe pas"
read nomrech
done
cat $nomrech
;;
4)
echo "Tapez le nom d'un contacte à modifier"
read nommodif
while [ ! -f $nommodif ]; do
echo "Le fichier n'existe pas"
read nommodif
done
echo "Tapez le nouveau numéro à modifier"
read nouvnum
echo $nouvnum > $nommodif
;;
5)
echo " Tapez le numero de la personne que vous cherchez"
read numchercher
while ! grep -i "$numchercher" * ; do
echo "ce numero n'existe pas "
read nomchercher
done
grep $numchercher *
;;
esac
答案 0 :(得分:1)
首先,您需要考虑如何实际存储数据。然后,尝试将操作与每个项目相关联:
基本上,我认为您可以使用以下命令设法完成作业:cat
,find
,*
,grep
以及它!
<强>更新强>
对于你的上一个问题(第5点),在我看来你的代码真的很复杂。看看这个样本:
$ echo 0123456789 > john
$ echo 0987654321 > bob
$ grep 0987654321 *
bob:0987654321
$ grep jfkljlfds *
$ echo $?
1
$ grep 0123456789 *
john:0123456789
$ echo $?
0
$ false
$ echo $?
1
$ false || echo "oops that one didn't work"
oops that one didn't work
现在我认为你拥有继续前进所需的一切。
$?
是上一个命令的返回码。如果您查看man grep (1)
:
退出状态 如果找到选定行,则退出状态为0,如果未找到,则退出状态为1。如果发生错误,则退出状态为2.(注意:POSIX错误处理 代码应该检查&#39; 2&#39;或者更大。)
基本上,使用or
运算符(||
)的技巧仅在左侧部分返回false时才显示错误。
我认为read name; grep $name * || echo "$name was not found"
可以解决问题。
顺便说一句,你经常要求两次辩论(检查后)。你不应该那样做。测试后该变量仍然存在。