• C高级day4(shell脚本)


    一、Xmind整理:

    二、上课笔记整理:

    1.创建一个文件,给组用户可读权限,所属用户可写权限,其他用户可执行权限,使用if判断文件有哪些权限

    1. #!/bin/bash
    2. touch 1
    3. chmod 241 1
    4. if [ -r 1 ]
    5. then
    6. echo "文件1有可读权限"
    7. fi
    8. if [ -w 1 ]
    9. then
    10. echo "文件1有可写权限"
    11. fi
    12. if [ -x 1 ]
    13. then
    14. echo "文件1有可可执行权限"
    15. fi

    2.终端输入年份,判断闰平年(四年一闰,百年不闰,四百年再闰) 

    1. #!/bin/bash
    2. read -p "请输入一个年份" year
    3. #对年份的判断
    4. #year对4\100和400取余都是算术运算,需要借助于(())\$[]\let\expr
    5. #test指令内不能使用&&和||进行运算,test提供了-a进行逻辑与,-o进行逻辑或
    6. if [ $((year%4)) -eq 0 -a $((year%100)) -ne 0 -o $((year%400)) -eq 0 ]
    7. #if [ $((year%4)) -eq 0 ] && [ $((year%100)) -ne 0 ] || [ $((year%400)) -eq 0 ]
    8. #if [ $((year%4==0&&year%100!=0||year%400==0)) -eq 1 ]
    9. then
    10. echo "$year是一个闰年"
    11. else
    12. echo "$year不是一个闰年"
    13. fi

    3.终端输入一个.sh文件名,判断文件是否存在,如果存在判断文件是否有可执行权限,如果有执行脚本,如果没有添加可执行权限,如果文件不存在,创建脚本文件 

    1. #!/bin/bash
    2. read -p "请输入.sh文件" var
    3. if [ -e "$var" ]
    4. then
    5. echo "文件存在"
    6. if [ -x "$var" ]
    7. then
    8. bash $var
    9. else
    10. chmod 777 $var
    11. fi
    12. else
    13. echo"文件不存在"
    14. touch $var
    15. fi

    4.终端输入一个.c文件名,判断文件中是否有内容,如果有内容编译该文件,如果没有内容删除文件 

    1. #!/bin/bash
    2. read -p "请输入一个.c文件" filename
    3. if [ -s $filename ] #判断文件是否存在且有内容
    4. then
    5. gcc $filename
    6. else
    7. if [ -e $filename ] #如果文件存在
    8. then
    9. rm $filename
    10. echo "$filename已删除"
    11. else
    12. echo "$filename不存在"
    13. fi
    14. fi

    5.终端输入两个文件名,判断文件的时间戳哪一个更新 

    1. #!/bin/bash
    2. read -p "请输入两个文件名" filename1 filename2
    3. if [ $filename1 -nt $filename2 ]
    4. #如果条件成立,-nt参数表示前面文件的时间戳更新
    5. then
    6. echo "$filename1更新"
    7. else
    8. echo "$filename2更新"
    9. fi

    6.终端输入学生成绩,判断等级100-90A,90-80B,80-70C,70-60D,其他不及格 

    1. #!/bin/bash
    2. read -p "请输入成绩" score
    3. ret=$((score/10))
    4. : 'case $score in
    5. 1??|9?)
    6. echo "A"
    7. ;;
    8. 8?)
    9. echo "B"
    10. ;;
    11. 7?)
    12. echo "C"
    13. ;;
    14. 6?)
    15. echo "D"
    16. ;;
    17. *)
    18. echo "不及格"
    19. esac'
    20. case $ret in
    21. 10|9)
    22. echo "A"
    23. ;;
    24. 8)
    25. echo B
    26. ;;
    27. 7)
    28. echo C
    29. ;;
    30. 6)
    31. echo D
    32. ;;
    33. *)
    34. echo "不及格"
    35. esac

     7.终端输入一个字符,判断是字母还是数字字符

    1. read -p "请输入一个字符" var
    2. case $var in
    3. [0-9])
    4. echo "是一个数字"
    5. ;;
    6. [A-Z]|[a-z])
    7. echo "是一个字母"
    8. ;;
    9. *)
    10. echo 不是数字也不是字母
    11. esac

    8.求1-100的和,5050 

    1. #!/bin/bash
    2. read -p "please input a num:" num
    3. i=1
    4. sum=0
    5. while [ $i -le $num ]
    6. do
    7. sum=$((sum+i))
    8. i=$((i+1))
    9. done

    9.终端输入数组,使用while循环,实现数组中元素的求和 

    1. #!/bin/bash
    2. read -p "请输入数组" -a arr
    3. i=0
    4. sum=0
    5. while [ $i -lt ${#arr[*]} ]
    6. do
    7. ((sum += ${arr[i]}))
    8. ((i++))
    9. done
    10. echo $sum

    10.终端输入行数,打印直角三角形 

    1. #!/bin/bash
    2. read -p "请输入行数" line
    3. i=1
    4. j=1
    5. while [ $i -le $line ]
    6. do
    7. j=1 #每一次进入内层循环前j都从1开始
    8. while [ $j -le $i ]
    9. do
    10. echo -n "*"
    11. ((j++))
    12. done
    13. echo "" #每行输出结束需要换行
    14. ((i++))
    15. done

     11.求100-1000内的水仙花数

    1. #!/bin/bash
    2. for i in {100..999}
    3. do
    4. bai=$(($i/100))
    5. shi=$(($i/10%10))
    6. ge=$(($i%10))
    7. if test $(($[$bai**3] + $[$shi**3] + $[$ge**3])) -eq $i
    8. then
    9. echo $i
    10. fi
    11. done

    12.定义一个稀疏数组,求数组中元素的和

    1. arr=([0]=12 [5]=78 [7]=23)
    2. sum=0
    3. for j in ${arr[*]}
    4. do
    5. ((sum+=j))
    6. done
    7. echo $sum

    13.求家目录下目录文件和普通文件个数的和

    1. #!/bin/bash
    2. fnum=0
    3. dnum=0
    4. for i in `ls ~`
    5. do
    6. if [ -d ~/$i ]
    7. then
    8. ((dnum++))
    9. fi
    10. if [ -f ~/$i ]
    11. then
    12. ((fnum++))
    13. fi
    14. done
    15. echo $((dnum+fnum))
    16. #!/bin/bash
    17. #var1和var2都是软连接文件
    18. var1=2
    19. var2=test1
    20. #对软连接文件判断是,实际是在判断源文件
    21. if [ -f $var1 ]
    22. then
    23. echo "$var1是一个普通文件"
    24. fi
    25. if [ -d $var2 ]
    26. then
    27. echo "$var2是一个目录文件"
    28. fi

    14.select···in和case···in结合

    1. #!/bin/bash
    2. #select```in和case ```in结合
    3. #可以通过用户的不同选择执行不同的指令
    4. select i in linux wins macos q Q
    5. do
    6. case $i in
    7. linux)
    8. echo "打开的是Linux系统"
    9. ;;
    10. wins)
    11. echo "打开的是wins系统"
    12. ;;
    13. macos)
    14. echo "打开的是macos系统"
    15. ;;
    16. q)
    17. break
    18. ;;
    19. Q)
    20. exit
    21. ;;
    22. *)
    23. echo "选择错误"
    24. esac
    25. done
    26. echo hello world

    15.终端输入一个游戏名,让用户选择是否下载,如果用户选择的是Y|YES|y|yes就下载该游戏,N|NO|n|no就不下载该游戏。

    1. #!/bin/bash
    2. read -p "请输入游戏名" gname
    3. select i in Y YES y yes N NO n NO
    4. do
    5. case $i in
    6. Y|YES|y|yes)
    7. echo "下载$gname"
    8. ;;
    9. N|NO|n|no)
    10. echo "不下载$gname"
    11. exit
    12. esac
    13. done

     16.辅助控制关键字

    1. #!/bin/bash
    2. for((i=1;i<3;i++))
    3. do
    4. echo "进入第一层循环 i=$i*******************"
    5. echo
    6. for j in `seq 1 1 2`
    7. do
    8. echo "进入第二层循环 j=$j------------------"
    9. echo
    10. for k in {1..3}
    11. do
    12. echo "进入第三层循环 k=$k /"
    13. echo
    14. if [ $k -eq 2 ]
    15. then
    16. echo "准备跳出循环"
    17. #break 3
    18. continue 3
    19. fi
    20. echo "退出第三层循环 k=$k/"
    21. echo
    22. done
    23. echo "退出第二层循环 j=$j------------------"
    24. echo
    25. done
    26. echo "退出第一层循环 i=$i*******************"
    27. echo
    28. done

     17.获取函数的返回值

    1. #!/bin/bash
    2. function fun()
    3. {
    4. echo hello world
    5. }
    6. function add()
    7. {
    8. echo $(($1+$2))
    9. echo $0
    10. a=258
    11. return $a #返回值只能返回0-255之中的数
    12. }
    13. add 12 34
    14. var=$? #使用$?接收函数的返回值
    15. echo $var
    16. echo $a

     18.没有返回值的函数怎么接收结果

    1. #!/bin/bash
    2. function fun()
    3. {
    4. echo hello world
    5. }
    6. a=90
    7. function add()
    8. {
    9. #echo $(($1+$2))
    10. #echo $0
    11. a=258
    12. return $a #返回值只能返回0-255之中的数
    13. }
    14. : 'add 12 34
    15. var=$? #使用$?接收函数的返回值
    16. echo $var
    17. echo $a #可以访问a的值,a是一个全局变量
    18. '
    19. #如何接受fun函数的结果
    20. ret=`fun`
    21. echo $ret #代码只有1行输出,fun中的输出已经被命令置换符接收了
    22. add
    23. echo $a #258,因为a在函数内被改变了

     19.local在函数中的使用

    1. #!/bin/bash
    2. function fun()
    3. {
    4. echo hello world
    5. }
    6. a=90
    7. function add()
    8. {
    9. #echo $(($1+$2))
    10. #echo $0
    11. a=258
    12. local b=80 #被定义成了一个局部变量
    13. echo $b
    14. unset b #unset是可以清空局部变量
    15. echo $b
    16. return $a #返回值只能返回0-255之中的数
    17. }
    18. : 'add 12 34
    19. var=$? #使用$?接收函数的返回值
    20. echo $var
    21. echo $a #可以访问a的值,a是一个全局变量
    22. '
    23. #如何接受fun函数的结果
    24. ret=`fun`
    25. echo $ret #代码只有1行输出,fun中的输出已经被命令置换符接收了
    26. add
    27. echo $a #258,因为a在函数内被改变了
    28. echo $b #空行,因为b在函数内是一个loacl类型的变量,局部变量

    三、课后作业:

    1.实现一个对数组求和的函数,数组通过实参传递给函数

    1. num=0
    2. read -p "请输入一组数据:" -a arr
    3. function add()
    4. {
    5. for ((i=0; i<${#arr[*]}; i++))
    6. do
    7. ((num+=arr[i]))
    8. done
    9. return $num
    10. }
    11. add ${arr[*]}
    12. echo $?

    2.写一个函数,输出当前用户的uid和gid,并使用变量接收结果

    1. function fun()
    2. {
    3. echo "uid:"`id -u`
    4. echo "gid:"`id -g`
    5. uid=`id -u`
    6. gid=`id -g`
    7. }
    8. fun
    9. echo $uid
    10. echo $gid
  • 相关阅读:
    CSS 常见属性设置
    大数据可视化BI分析工具Apache Superset实现公网远程访问
    攻防演练前 临战阶段:战前动员,鼓舞士气
    【HashMap】HashMap的6种遍历方法
    Python之网络编程
    【学习日志】2022.09.05 GAMES101
    Linux 内存管理 pt.1
    helm2 与 helm3
    unity的Thread子线程堵塞主线程ui等元素(解决方案二)
    C# 压缩PDF文件
  • 原文地址:https://blog.csdn.net/m0_68542867/article/details/132816480