Linux shell脚本命令汇总(不断更新)

Shell 是什么?

  • Shell 指一种应用程序,它提供了一个界面 用户通过这个界面访问操作系统内核的服务
  • Shell 脚本(shell script) 用shell 编写的脚本程序。 shell 通常都是指 shell 脚本
  • Linux的精髓:将多个程序(命令)组装成大型程序, 而Shell 就是最好粘合剂
  • Shell的优点 简单、高效、易维护、随写随用
  • Shell 开发流程:需求分析、问题建模、为代码流程逻辑、代码实现与运行、总结
  • 脚本所有种类查看:cat /etc/shells 
  • 正在使用的种类:echo $SHELL
  • 编码规范:多加注释说明、命名建议规则:变量名大写、局部变量小写、函数名小写、函数变量 加 local
  • 编辑器 VS Code:宿主机中写的代码,同步到虚拟机中,需要设置共享文件夹,配置sftp:查看 -> 命令面板 -> SFTP config

使用:

  • bash头部默认用bash:#!/bin/bash
  • 注释:#单行注释用于行首解释说明,多行注释用::<<EOF ...EOF

Shell 基础语法:

  • 变量:命名只能使用英文字母,数字和下划线、首个字符不能以数字开头、中间不能有空格,可以使用下划线(_)、不能使用bash里的关键字(help命令查看)
  • 变量分类:局部变量、环境变量、特殊变量
  • 局部变量:仅在当前shell实例中有效、在脚本或命令中定义、函数内的变量 加 local
  • 变量的定义和使用:
    #!/bin/bash
    
    # 1. 变量的定义 和使用
    my_name=zhangchulan
    echo "1. $my_name"
    
    # 2. 另一种定义方式
    course="linux start"
    echo 2. ${course}
    
    # 3. 只读变量, 不加$
    readonly course
    course="linux kernel"
    echo "3. ${course}"
    
    # 4. 删除变量, 不加$
    unset my_name
    echo  "4. ${my_name}"
    
    
    结果:
    1. zhangchulan
    2. linux start
    2-variable.sh: line 13: course: readonly variabl

基本运算:

  • 算术运算:expr 求值操作、+加、 -减、 *乘、 /除、 % 取余
    #!/bin/bash
    # 算术基本运算, 加减乘除取余
    a=11
    b=5
    
    # 加法 expr
    val=`expr $a + $b`
    echo "$a + $b = $val"
    
    # 另一种数值运算 $[var]
    val=$[a-b]
    echo "$a - $b = $val"
    
    结果:
    11 + 5 = 16
    11 - 5 = 6
  • 关系运算: -eq 相等、-ne 不相等、-gt 大于、-ge 大于等于、-lt 小于、-le 小于等于
#!/bin/bash
# 关系运算
a=11
b=5

#例子, 其他 ne, gt, ge, lt, le 类似
if [ $a -eq $b ]
then
    echo "$a -eq $b : a 等于 b"
else
    echo "$a -eq $b: a 不等于 b"
fi

结果:
11 -eq 5: a 不等于 b
  • 布尔与逻辑运算:! 非运算 [ ! false ]、-o 或运算、-a 与运算 [ $a -lt 100 -a $b -gt 15 ] 、&& 逻辑与 [[ $a -lt 100 && $b -gt 100 ]] 、|| 逻辑或 、== 相等(数字)、 != 不等(数字)
#!/bin/bash
# 布尔运算
a=11; b=5
#例子, 其他 ne, gt, ge, lt, le 类似
if [ $a -eq $b ]
then
    echo "$a equal $b : a 等于 b"
else
    echo "$a not equal $b: a 不等于 b"
fi

# 逻辑运算 注意 两个 [[ ]]
if [[ $a -gt 0 && $b -gt 0 ]]
then
    echo "a, b 都大于 0"
fi

结果:
11 not equal 5: a 不等于 b
a, b 都大于 0
  • 字符串:单引号:原样输出,变量无效;双引号:可以包含变量
#!/bin/bash
course="Linux入门"

# 单引号
question="Linux 如何入门?$course"
echo $question

# 双引号
answer="请学习$course:课程!"
echo $answer

# 字符串拼接
echo "拼接后一起输出:\n"$question"\n"$answer

结果:
Linux 如何入门?Linux入门
请学习Linux入门:课程!
拼接后一起输出:
Linux 如何入门?Linux入门
请学习Linux入门:课程!
 1 #!/bin/bash
  2 # 字符串长度
  3 str="hello wolrd"
  4 echo "字符串"$str"的长度为:"${#str}
  5 
  6 # 获取子串, 从第1个字符开始,截取3个。
  7 echo "字符串"$str"子串:"${str:1:3}
  8 
  9 # 查找子串
 10 matched=`expr index "$str" wo`                                                                                      
 11 echo "字符串" $str "查找wo的位置在" $matched

结果:
字符串hello wolrd的长度为:11
字符串hello wolrd子串:ell
5
字符串 hello wolrd 查找wo的位置5
  • 字符串运算符:
  1 #!/bin/bash                                                                                                         
  2 # 算术基本运算, 加减乘除取余
  3 a=11
  4 b=5
  5 
  6 # 加法 expr
  7 val=`expr $a + $b`
  8 echo "$a + $b = $val"
  9 
 10 # 另一种数值运算 $[var]
 11 val=$[a-b]
 12 echo "$a - $b = $val"

结果:
11 + 5 = 16
11 - 5 = 6
  • 数组:定义, 下标从 0 开始、设置/读取、读取数组所有元素 @、读取数组长度
  1 #!/bin/bash                                                                                                         
  2 # 1. 数组的定义
  3 arr=(aa bb cc "hello world")
  4 # 2. 设置 元素
  5 arr[2]="222"
  6 # 3. 读取 元素
  7 echo  "下标为2的元素:"${arr[2]}
  8 # 4. 读取 所有元素, 用 @
  9 echo "所有元素:"${arr[@]}
 10 # 5. 获取数组长度, 用 #
 11 len=${#arr[@]}
 12 echo "数组长度:$len"

结果:
下标为2的元素:222
所有元素:aa bb 222 hello world
数组长度:4
  • 分支:if else \ case
  1 #!/bin/bash
  2 
  3 age=20
  4 if [ $age -le 10 ] # <=10
  5 then
  6     echo "少年"
  7 elif [ $age -le 20 ] # <=20
  8 then
  9     echo "青年"
 10 elif [ $age -le 50 ] # <=50
 11 then
 12     echo "中年"
 13 else # >50
 14     echo "老年"
 15 fi

结果:
青年

  1 #!/bin/bash                                                                                                         
  2 
  3 status=1
  4 case $status in
  5     0) echo "todo"
  6     ;;
  7     1) echo "doing"
  8     ;;
  9     2) echo "done"
 10     ;;
 11 esac

结果:
doing
  • 循环

  1 #!/bin/bash                                                                                                         
  2 # for 循环输出 数组内容
  3 arr=(aa bb cc)
  4 for item in ${arr[@]}
  5 do
  6     echo "$item"
  7 done

结果:
aa
bb
cc
  • 函数:function 关键字可选、函数后面的 () 可选
  •   1 #!/bin/bash                                                                                                         
      2 #函数的定义和调用
      3 function myfun()
      4 {
      5     echo "这是 shell 函数!"
      6 }
      7 
      8 myfun
    
    结果:
    这是 shell 函数!
    
      1 #!/bin/bash                                                                                                         
      2 #函数传参 和返回值
      3 function add()
      4 {
      5     local ret=$(($1+$2))
      6     return $ret
      7 }
      8 
      9 add 5 8
     10 echo $?
    
    结果:
    13

    常用命令

  • printf:打印输出
  • date:查看日期
  • cut: 截取 ,下标从1开始,举例: echo zhangchulan|cut -c2-3
  • 文本处理三剑客:grep 查找,sed编辑,awk报告
  • random根据date获取

更多参考:https://wangdoc.com/bash/intro.htm

猜你喜欢

转载自blog.csdn.net/weixin_42446330/article/details/105609679