在壳牌制作电话簿

时间:2015-03-10 01:14:05

标签: linux bash shell

我必须在shell(bash)制作一个phone_book ..

这是程序应该做的事情。

  1. 添加一个号码:你要求输入名称和号码。如果它已经不存在(验证),那么在名为$ name的同一目录中添加一个文件并包含1行:数字。

  2. 获取已保存名称的监听。

  3. 通过提供他的名字来寻找一个号码(我们也必须验证它是否存在。
  4. 修改一个号码(也验证)
  5. 通过提供他的电话号码来寻找姓名。(验证)。
  6. 我认为我们必须使用我在网上查看的案例,但我对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
    

1 个答案:

答案 0 :(得分:1)

首先,您需要考虑如何实际存储数据。然后,尝试将操作与每个项目相关联:

  1. 创建一个由包含一行的输入命名的文件
  2. 浏览文件夹并提取该目录中的所有文件名
  3. 在目录中找到一个文件,名称为
  4. 修改给定名称的文件内容(您可以在此时删除文件的内容)
  5. 查找给定模式的文件名
  6. 基本上,我认为您可以使用以下命令设法完成作业:catfind*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"可以解决问题。

    顺便说一句,你经常要求两次辩论(检查后)。你不应该那样做。测试后该变量仍然存在。