• Linux编程基础案例:第4章Shell编程


    案例4-1:已知/etc/passwd文件中的各项以:分隔,若使用awk命令处理/etc/passwd文件,提取其中的第1项和第3项,并使用空格分隔提取结果,则可以使用如下命令。

    awk -F: ‘{print $1 “” $3}’ /etc/passwd

    案例4-2:在Shell脚本中定义变量并进行引用。

    1. #!/bin/sh
    2. var="hello itheima"
    3. echo $var
    4. echo "$var"
    5. echo '$var'
    6. exit 0

    案例4-3:输入文件名,判断文件是否为目录,若是,则输出“[文件名]是个目录”。

    1. #!/bin/sh
    2. #单分支if语句
    3. read filename
    4. if [ -d $filename ]; then
    5.     echo $filename" is a directory"
    6. fi
    7. exit 0

    案例4-4:输入文件名,判断文件是否为目录,若是,则输出“[文件名]是个目录”;否则输

    出“[文件名]不是目录”。

    1. #!/bin/sh
    2. #双分支if语句
    3. read filename
    4. if [ -d $filename ]; then
    5.     echo $filename" is a directory"
    6. else
    7.     echo $filename" is't a directory"
    8. fi
    9. exit 0

    案例4-5:判断一个文件是否为目录,若是,输出目录中的文件;若不是,判断该文件是否可执行。若能执行,输出“这是一个可执行文件”;否则输出“该文件不可执行”。

    1. #!/bin/sh
    2. read filename
    3. if [ -d $filename ]; then
    4.     ls $filename
    5. elif [ -x $filename ]; then
    6.     echo "This is a executable file."
    7. else
    8.     echo "This is not a executable file."
    9. fi
    10. exit 0

    案例4-6:编写脚本,脚本可输出一个包含Android、Java、C++、IOS这四项的目录。脚本根据用户的选择,输出对应的内容,如Your have selected C++。

    1. #!/bin/sh
    2. #select条件语句
    3. echo "What do you want to study?"
    4. select subject in "Android" "Java" "C++" "IOS"
    5. do
    6.     echo "You have selected $subject."
    7. break
    8. done
    9. exit 0

    案例4-7:实现一个简单的四则运算,要求用户从键盘输入两个数据和一个运算符。脚本程序根据用户输入,输出计算结果。

    1. #!/bin/sh
    2. echo -e "a:\c"
    3. read a
    4. echo -e "b:\c"
    5. read b
    6. echo -e "select(+ - * /):\c"
    7. read var
    8. case $var in
    9.     '+') echo "a+b="`expr $a "+" $b`;;
    10. "-") echo "a-b="`expr $a "-" $b`;;
    11. "*") echo "a*b="`expr $a "*" $b`;;
    12. "/") echo "a/b="`expr $a "/" $b`;;
    13. *) echo "error"
    14. esac
    15. exit 0

    案例4-8:使用for循环输出月份列表中的12个月份。

    1. #!/bin/sh
    2. for month in Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
    3. do
    4.     echo -e "$month\t\c"
    5. done
    6. echo
    7. exit 0

    案例4-9:在当前目录的itheima文件夹中存放着多个以.bxg为后缀的文件,使用for循环将其中所有以.bxg结尾的文件删除。

    1. #!/bin/sh
    2. for file in ~/itheima/*.bxg
    3. do
    4.     rm $file
    5.     echo "$file has been deleted."
    6. done
    7. exit 0

    案例4-10:使用while循环计算整数1~100的和。

     

    1. #!/bin/sh
    2. count=1
    3. sum=0
    4. while [ $count -le 100 ]
    5. do
    6.     sum=`expr $sum + $count`
    7.     count=`expr $count  + 1`
    8. done
    9. echo "sum=$sum"
    10. exit 0

    案例4-11:使用until循环输出有限个数据。

    1. #!/bin/sh
    2. #until
    3. i=1
    4. until [ $i -gt 3 ]
    5. do
    6.     echo "the number is $i."
    7.     i=`expr $i + 1`
    8. done
    9. exit 0

    案例4-12:利用脚本case_test(4.4.4节中的案例4-7)测试-n选项的用法。

    sh -n case_test

    案例4-15:定义一个hello函数,该函数可以输出hello itheima,并在脚本中使用该函数。

    1. #!/bin/sh
    2. #function hello
    3. function hello(){
    4.     echo "hello itheima."
    5. }
    6. #main
    7. hello #hello函数调用
    8. exit 0

    案例4-16:分别为脚本中的位置变量和函数中的位置变量传参。

    1. #!/bin/sh
    2. #function
    3. function _choice(){
    4.     echo "Your chioce is $1."
    5. }
    6. #main
    7. case $1 in
    8.     "C++" ) _choice C++ ;;
    9.     "Android" ) _choice Android ;;
    10.     "Python" ) _choice Python;;
    11.     *) echo "$0:please select in (C++/Android/Python)"
    12. esac
    13. exit 0

    案例4-17:验证Shell脚本函数中定义的变量是否是局部变量。

    1. #!/bin/sh
    2. function fun(){
    3. a=10
    4. echo "fun:a=$a"
    5. }
    6. a=5
    7. echo "main:a=$a"
    8. fun #函数调用
    9. echo "main:a=$a"
    10. exit 0

    案例4-18:使用local在函数中定义一个局部变量。

    1. #!/bin/sh
    2. function fun(){
    3.     local a=10
    4.     echo "fun:a=$a"
    5. }
    6. a=5
    7. echo "main:a=$a"
    8. fun             #函数调用
    9. echo "main:a=$a"
    10. exit 0

  • 相关阅读:
    双非二本上岸滴滴暑期实习总结
    将激光点云数据投影到二维图像及对三维点云上色
    构造方法的私有化和枚举enum
    R - Sonya and Hotels
    【loadrunner】form表单模式提交例子
    docker部署前后端分离项目
    阿里云服务器ECS共享型和企业级是什么?
    SDVO:LDSO+语义,直接法语义SLAM(RAL 2022)
    C# xml、config文件添加自定义节点
    OpenSergo 流量路由:从场景到标准化的探索
  • 原文地址:https://blog.csdn.net/WHT869706733/article/details/125418352