[ARM入门] Hello系列 | Shell编程必备简明基础知识

[复制链接]
843|10
 楼主| 豆杀包 发表于 2022-8-30 23:12 | 显示全部楼层 |阅读模式

Hello系列,汇总短而实用的内容。

在Linux下进行开发,对于一些繁杂的、需要重复性进行的工作,我们都有必要写一些shell脚本来完成这些繁杂的工作。

本篇笔记围绕如下内容做分享:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 豆杀包 发表于 2022-8-30 23:12 | 显示全部楼层
hello shell
老规矩,hello走一波~

最简单的shell脚本:
  1. #!/bin/bash
  2. echo "hello shell" # 这是注释

#! 是一个约定标记,指定这个脚本使用哪个shell解释器执行。这里指明使用bash解释器,这也是最常用的shell解释器。

常见的shell解释器还有:

Bourne Shell(/usr/bin/sh或/bin/sh)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
echo就是打印输出命令:

单行注释:使用符号 #。

多行注释:
  1. :<<!
  2. 注释内容...
  3. 注释内容...
  4. 注释内容...
  5. !

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 豆杀包 发表于 2022-8-30 23:13 | 显示全部楼层
变量
  1. #!/bin/bash

  2. # 定义变量
  3. name="LinuxZn"
  4. num=66

  5. #使用变量
  6. echo "My name is ${name}, num is ${num}"


注意:=号两边不能有空格!!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 豆杀包 发表于 2022-8-30 23:14 | 显示全部楼层
数组
  1. #!/bin/bash
  2. # 定义数组
  3. array=(0 1 2 3)   # 方式一
  4. array=(           # 方式二
  5. 0
  6. 1
  7. 2
  8. 3
  9. )

  10. array[0]=0        # 方式三
  11. array[1]=1
  12. array[2]=2
  13. array[3]=3

  14. # 访问数组中的索引为3的元素
  15. echo "array[0]: ${array[3]}"

  16. # 访问数组所有元素
  17. echo "all elements: ${array[@]}"

  18. # 获取数组长度
  19. echo "array len: ${#array[@]}"   # 方式一
  20. echo "array len: ${#array[*]}"   # 方式二

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 豆杀包 发表于 2022-8-30 23:14 | 显示全部楼层
输入输出
1、输入测试:
  1. #!/bin/bash
  2. read -p "input a num:" num    # 获取键盘输入的数字给到变量 num
  3. echo "num = ${num}"
  4. read -p "input a string:" str # 获取键盘输入的数字给到变量 str
  5. echo "str = ${str}"


2、输出测试:
前面我们都是使用echo来输出信息。其实也可以用printf来输出,printf的使用与C语言中的printf类似。
  1. #!/bin/bash

  2. # 定义变量
  3. name="LinuxZn"
  4. num=66

  5. #使用变量
  6. echo "My name is ${name}, num is ${num}"
  7. printf "My name is %s, num is %d\n" ${name} ${num}







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 豆杀包 发表于 2022-8-30 23:16 | 显示全部楼层
流程控制
1、if判断

  1. #!/bin/bash

  2. a=1
  3. b=2

  4. if [ ${a} == ${b} ]
  5. then
  6.     printf "a == b\n"
  7. elif [ ${a} -lt ${b} ]
  8. then
  9.     printf "a < b\n"
  10. else
  11.     printf "a > b\n"
  12. fi


注意:这里的if判断,需要严格输入空格。if、中括号 [] 与其中间的代码 应该有空格隔开 !!!

2、for循环
  1. #!/bin/bash

  2. # 循环输出数字
  3. for i in 1 2 3 4 5 6
  4. do
  5.     echo "i = ${i}"
  6. done

  7. # 循环输出字符串
  8. for str in aaa bbb ccc ddd eee fff
  9. do
  10.     echo "str = ${str}"
  11. done


3、case
  1. #!/bin/bash

  2. read -p "input a num(1~3):" num
  3. case ${num} in
  4.     1)  printf "num = 1\n"
  5.     ;;
  6.     2)  printf "num = 2\n"
  7.     ;;
  8.     3)  printf "num = 3\n"
  9.     ;;
  10.     *)  printf "error\n"
  11.     ;;
  12. esac



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 豆杀包 发表于 2022-8-30 23:16 | 显示全部楼层
操作命令
我们可以在shell脚本中输入命令,如输入ls命令:
  1. #!/bin/bash

  2. # 方式一:使用()
  3. echo "方式一:使用()"
  4. for file in $(ls /home)   
  5. do
  6.     echo ${file}
  7. done

  8. # 方式二:使用``
  9. echo "方式二:使用\`\`"
  10. for file in `ls /home`
  11. do
  12.     echo ${file}
  13. done


注意:``符号不是单引号!!!是键盘Esc下方的按键。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 豆杀包 发表于 2022-8-30 23:17 | 显示全部楼层
基本运算符
1、算数运算符

  1. #!/bin/bash

  2. # expr 是一款表达式计算工具

  3. a=1
  4. b=2

  5. # 加
  6. res=`expr ${a} + ${b}`   # 符号两边的空格不能省
  7. echo "a + b : ${res}"

  8. # 减
  9. res=`expr ${a} - ${b}`
  10. echo "a - b : ${res}"

  11. # 乘
  12. res=`expr ${a} \* ${b}`   # 乘号要转义\*
  13. echo "a * b : ${res}"

  14. # 除
  15. res=`expr ${b} / ${a}`
  16. echo "b / a : ${res}"

  17. # 取余
  18. res=`expr ${b} % ${a}`
  19. echo "b % a : ${res}"

  20. # 等于
  21. if [ ${a} == ${b} ]    # 注意空格!!
  22. then
  23.    echo "a == b"
  24. fi

  25. # 不等于
  26. if [ ${a} != ${b} ]
  27. then
  28.    echo "a != b"
  29. fi


2、关系运算符
  1. #!/bin/bash

  2. # -eq:等于。EQUAL的缩写。
  3. # -ne:不等于。NOT EQUAL的缩写。
  4. # -gt:大于。GREATER THAN的缩写。
  5. # -lt:小于。LESS THAN的缩写
  6. # -ge:大于等于。GREATER THAN OR EQUAL的缩写。
  7. # -le:小于等于。LESS THAN OR EQUAL的缩写。

  8. a=1
  9. b=2

  10. # 等于
  11. if [ ${a} -eq ${b} ]   # 注意空格。
  12. then
  13.    echo "a 等于 b"
  14. fi

  15. # 不等于
  16. if [ ${a} -ne ${b} ]  
  17. then
  18.    echo "a 不等于 b"
  19. fi

  20. # 大于
  21. if [ ${a} -gt ${b} ]  
  22. then
  23.    echo "a 大于 b"
  24. fi

  25. # 小于
  26. if [ ${a} -lt ${b} ]  
  27. then
  28.    echo "a 小于 b"
  29. fi

  30. # 大于等于
  31. if [ ${a} -ge ${b} ]  
  32. then
  33.    echo "a 大于等于 b"
  34. fi

  35. # 小于等于
  36. if [ ${a} -le ${b} ]  
  37. then
  38.    echo "a 小于等于 b"
  39. fi


3、逻辑运算符
  1. #!/bin/bash

  2. a=1 # 等号两边不能有空格
  3. b=2

  4. # 逻辑与
  5. if [[ ${a} -lt 6 && ${b} -gt 6 ]]  # 注意:1、使用[[]] 2、注意空格
  6. then
  7.    echo "true"
  8. else
  9.    echo "false"
  10. fi

  11. # 逻辑或
  12. if [[ ${a} -lt 6 || ${b} -gt 6 ]]
  13. then
  14.    echo "true"
  15. else
  16.    echo "false"
  17. fi


4、字符串运算符
  1. #!/bin/bash

  2. a="abc"
  3. b="xyz"

  4. # 字符串相等判断
  5. if [ ${a} = ${b} ]
  6. then
  7.    echo "a 等于 b"
  8. fi

  9. # 字符串不相等判断
  10. if [ ${a} != ${b} ]
  11. then
  12.    echo "a 不等于 b"
  13. fi

  14. # 字符串长度是否为0
  15. if [ -z ${a} ]
  16. then
  17.    echo "字符串 ${a} 长度为 0"
  18. fi

  19. # 字符串长度是否为0
  20. if [ -n "${a}" ]
  21. then
  22.    echo "字符串 ${a} 长度不为 0"
  23. fi

  24. # 字符串是否为空
  25. if [ $a ]
  26. then
  27.    echo "字符串 ${a} 不为空"
  28. fi

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 豆杀包 发表于 2022-8-30 23:19 | 显示全部楼层
参数传递
  1. #!/bin/bash

  2. echo "输入参数的个数: $#"

  3. if [ $# != 2 ]
  4. then
  5.     echo "输入参数的个数不为2,请重新输入"
  6. else
  7.     echo "第 1 个参数:$1";
  8.     echo "第 2 个参数:$2";
  9. fi

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 豆杀包 发表于 2022-8-30 23:26 | 显示全部楼层
函数
1、无输入参数、无返回值


  1. #!/bin/bash

  2. # 函数定义
  3. hello_func()
  4. {
  5.     printf "hello func\n"
  6. }

  7. # 函数调用
  8. hello_func


2、无输入参数、有返回值
  1. #!/bin/bash

  2. # 函数定义
  3. add()
  4. {
  5.     read -p "input a num: " num1
  6.     read -p "input a num: " num2
  7.     sum=`expr ${num1} + ${num2}`  # ``符号在键盘Esc键的下方
  8.     return ${sum}
  9. }

  10. # 函数调用
  11. add
  12. echo "sum=$?" # 函数返回值在调用该函数后通过 $? 来获得



函数返回值在调用该函数后通过 $? 来获得
3、有输入参数、有返回值
  1. #!/bin/bash

  2. # 函数定义
  3. add()
  4. {
  5.     echo "第 1 个参数:$1";
  6.     echo "第 2 个参数:$2";
  7.     sum=`expr $1 + $2`
  8.     return ${sum}
  9. }

  10. # 函数调用
  11. add 3 4
  12. echo "sum=$?" # 函数返回值在调用该函数后通过 $? 来获得


shell输入参数会影响到函数输入参数吗?不会:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 豆杀包 发表于 2022-8-30 23:30 | 显示全部楼层
文件相关判断
  1. #!/bin/bash

  2. # -e filename 如果 filename存在,则为真
  3. # -d filename 如果 filename为目录,则为真
  4. # -f filename 如果 filename为常规文件,则为真
  5. # -L filename 如果 filename为符号链接,则为真
  6. # -r filename 如果 filename可读,则为真
  7. # -w filename 如果 filename可写,则为真
  8. # -x filename 如果 filename可执行,则为真
  9. # -s filename 如果文件长度不为0,则为真
  10. # -h filename 如果文件是软链接,则为真

  11. file="hello.txt"

  12. if [ -e ${file} ]
  13. then
  14.     echo "文件存在"
  15. else
  16.     echo "文件不存在,创建文件"
  17.     $(touch ${file})
  18.     if [ -r ${file} ]
  19.     then
  20.         echo "文件可读"
  21.     else
  22.         echo "文件不可读"
  23.     fi

  24.     if [ -w ${file} ]
  25.     then
  26.         echo "文件可写"
  27.     else
  28.         echo "文件不可写"
  29.     fi

  30.     if [ -x ${file} ]
  31.     then
  32.         echo "文件可执行"
  33.     else
  34.         echo "文件不可执行"
  35.     fi
  36. fi


本文提及的知识点仅仅是shell编程中很小的一部分知识,这一小部分知识可以快速让我们快速上手shell编程。

在实际学习、工作中还要多写多练,遇到不会的知识点再查资料学习。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

49

主题

323

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部