2015-10-16 158 views
0

嗨,大家好我需要为我的班级创建一个bash脚本,并且我还没有采用任何教授如何操作的类。在bash脚本菜单必须具备以下条件:Bash脚本添加,删除,用户,目录和文件

Please choose one of the following option: 
a- Create a File 
b- Create a Directory 
c- Delete a File 
d- Delete a Directory 
e- Create a User 
f- Delete a User 
q- Quit 


Enter your choice: a 
    What would you like to name your file (including the path to the location to where you want the file to be): ~/Data 
    ~/Data: File Created successfully. 
Enter your choice: q 

我已经尝试做搜索我自己的,但因为我从来没有做过这之前,我不知道从哪里开始。我知道如何执行它,至少我知道如何用命令完成所有这些,但我不知道如何创建bash脚本文件。我会很感激帮助和一些解释,所以我至少可以试着理解这一点。如果有帮助的话,我的课程正在使用最新版本的Fedora。此外,教授希望我们使用纳米

+1

教授也提供了文档吗? – MeetTitan

+0

她只给了我们4个网站的链接信息,但我只有一门关于编程的课程,它是WBScripting,我与课堂斗争。我试图了解到底发生了什么,但到目前为止,我只能学会如何创建,并通过在网上查看密码和删除密码以及删除它,因为我不知道我在做什么正在做。此外,我正在我的学校提供​​的一个模拟实验室中对此进行测试。我需要这个帮助 – Alex

+0

另外我们有两个选项做一个10-15页报告为公司或这个bash脚本选择Linux操作系统的好处。由于我对脚本知识很少,而且我对它很不熟悉,所以我想借此机会了解更多信息。 – Alex

回答

2

10-15页报告有什么问题?包括研究和写作在内,您每小时查看一次。一块蛋糕...或者,

你欠洛塔啤酒:

#!/bin/bash 

while [ "$SEL" != q ]; do 
cat >&2 << MENU 

    Enter a number to launch: 
    a - Create a File 
    b - Create a Directory 
    c - Delete a File 
    d - Delete a Directory 
    e - Create a User 
    f - Delete a User 
    q - Exit 
MENU 
    printf "\n Enter your choice: " 
    read SEL 
    SEL=${SEL,,} 
    case $SEL in 
     a) printf "\nWhat would you like to name your File?\n" 
      printf "(including the path to the file location): " 
      read -r fname 
      [ -n $fname ] && touch "$fname" || \ 
      printf "error: invalid filename.\n" 
      unset fname 
      ;; 
     b) printf "\nWhat would you like to name your Directory?\n" 
      printf "(including the path to the directory location): " 
      read -r dname 
      [ -n $dname ] && mkdir -p "$dname" || \ 
      printf "error: invalid directory name.\n" 
      unset dname 
      ;; 
     c) printf "\nWhat File would you lime to delete?\n" 
      printf "(including path): " 
      read -r fname 
      [ -w "$fname" ] && rm "$fname" || \ 
      printf "error: invalid filename or insufficent permission.\n" 
      unset fname 
      ;; 
     d) printf "\nWhat Directory would you lime to delete?\n" 
      printf "(including path): " 
      read -r dname 
      [ -d "$dname" -a -w "$dname" ] && rm -r "$dname" || \ 
      printf "error: invalid directory or insufficent permission.\n" 
      unset dname 
      ;; 
     e) printf "\nEnter user name to add: " 
      read -r uname 
      [ -n $uname ] && useradd $uname 
      unset uname 
      ;; 
     f) printf "\nEnter user name to delete: " 
      read -r uname 
      [ -n $uname ] && userdel $uname 
      unset uname 
      ;; 
     q) exit 0 
      ;; 
     *) printf "\nError. Please enter a valid selection.\n" 
      ;; 
    esac 
done 

注:你要确保你的青睐返回到有人需要在未来...

+0

他的教授会对他的知识印象深刻。 – MeetTitan

+0

你认为他的教授会买吗? –

+0

如果有人向我展示第一次作业,我会留下深刻的印象。 Heredocs有些先进。无论如何,剧本写得很好。在一个侧面说明中,你的意思是在你的情况下'echo'而不是'printf'? – MeetTitan

0

我希望你的助教或教授提供一点帮助。这是一个可以帮助你的基本程序。这不是你提交答案的手段,而是让你学习(注意,我对bash知之甚少)。我确实喜欢你有机会解决bash问题,而不是写报告。

首先将其复制到nano中。尽管删除行号。这将是一个痛苦的过程。将该文件保存为test.sh.从命令行输入:chmod 755 test.sh。要运行该程序,请输入./test.sh

我会在行内写评论。

1 #!/bin/bash 
2 
3 # create a function that will have echo statements 
4 # to print instructions on the screen 
5 function print_menu() { 
6 echo Please choose on of the following option: 
7 echo a - Create a file 
8 echo b - Create a directory 
9 echo c - Delete a file 
10 echo d - Delete a directory 
11 echo e - Create a user 
12 echo f - Delete a user 
13 echo q - quit 
14 } 

在这一点上,我们写了一个可以通过使用print_menu称它可以重复使用的功能。你会看到更进一步的阅读。

15 
16 # keep on looping until user presses q 
17 while true; do 
18 

我们要展示的打印菜单,然后询问用户问题的基础上,我们会做一些工作,然后重复显示打印菜单和内容十分重要的循环答案。

19  # print the menu 
20  print_menu 
21  # ask user to choose an option 
22  read -p "Enter your choice: " choice 

到目前为止,我们已向用户显示菜单并要求输入选项。理想情况下,我们应该从用户输入等方面进行错误检查,但我们会在其他时间覆盖这些概念。 choice是一个变量(或桶),将存储任何输入的用户。如果用户键入a,则choice存储桶将包含a。若要从桶中检索信息,我们使用$choice

23  # based on user's choice, do variety of things 
24  case $choice in 
25   a) read -p "Name of file to create: " file 
26    touch $file 
27    echo Created file $file 
28    echo ---- 
29    ;; 

退房http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_03.html关于如何写在bash case语句的更多信息。我们使用这个case声明来评估存储桶$choice的内容。

然后我们告诉bash,如果选择是a,请问另一个关于要创建的文件的问题。将答案存储在称为文件的存储区中。并使用$file

touch命令创建文件时使用存储桶中包含的值。然后,我们提供一些反馈给用户,然后通过键入;;

30 
31   b) read -p "Name of directory to create: " dir 
32    mkdir -p $dir 
33    echo Created directory $dir 
34    echo --- 
35    ;; 
36 
37   c) read -p "Name of file to delete: " file 
38    rm $file 
39    echo Deleted file $file 
40    echo --- 
41    ;; 
42 
43   d) read -p "Name of directory to delete: " dir 
44    rm -rf $dir 
45    echo Deleted directory $dir 
46    ;; 

上述所有收出这种情况下是一样的作为首选a。您可以添加更多代码来处理其他案例。

47 
48   q) echo Goodbye 
49    break;; 

如果用户键入q,我们给予反馈,我们从whilebreak出来。

50 
51   *) echo Nothing selected. Try again 
52    ;; 

如果以上选项都没有被用户给出,我们将只提供反馈并返回到while循环的顶部。

53  esac 
54  # sleep 3 seconds to give user time to digest the output 
55  sleep 3 
56 done 
57 

我们睡了3秒钟,然后回到while循环的顶部。

希望这会有所帮助。

+0

谢谢你zedfoxus我很欣赏你如何解释它对你有帮助的事情。我想学习,并能够自己。你建议我应该做些什么,以便更多地使用并学习如何编写更多代码?我知道你发布了一个链接,我会检查出来,看看。目前我想我会一起玩并练习。 – Alex

+0

非常欢迎。我建议阅读代码,理解你阅读的代码,然后自己实现它,同时尽可能少地查看解决方案。只要查看数以千计的bash相关问题(或任何其他您感兴趣的话题),查看答案,理解答案,并尝试自己跟踪答案。 – zedfoxus

+0

你也可以更详细地解释睡眠它究竟是什么我很好奇。 – Alex

相关问题