• linux之shell记录


    shell属于一种很容易学习的程序设计语言,依赖于功能强大的命令可以编写提高开发效率的脚本。这里记录一下常用的shell相关的知识点。 持续更新中。。。

    1、在linux或mac中查看使用的shell

    1. echo $SHELL
    2. /bin/bash

    shell是一种脚本语言,就会有解释器来执行这些脚本。

    Unix/Linux上常见的Shell脚本解释器有bash、sh、csh、ksh等,习惯上把它们称作一种Shell。我们常说有多少种Shell,其实说的是Shell脚本解释器。

    2、shell脚本调试

     在编写好的脚本运行时可能会报错,具体会提示哪行有错,通过vim进行命令行模式,

    输入 :set nu 会显示代码行,再输入 报错行 + 回车就会定位到报错的行。

    :set nu

    3、shell执行方式

    在linux系统的桌面上创建了一个demo.sh,用来测试 ,sh的权限在移动过程中可能会更改,这个要注意下。

    1. #!/bin/bash
    2. echo shell
    3. exit 0
    绝对路径和相对路径(./)

    /home/tsc/Desktop/demo.sh 

    ./demo.sh (./ 和 sh之间不要用空格)

    sh 和 bash 

    sh demo.sh

    bash demo.sh

    source 和 .

    . demo.sh(.和sh之间有空格)

    source demo.sh

    • ./shbash三种执行脚本的方式都是重新启动一个子shell,在子shell中执行脚本.
    • source 和 . 两种执行方式都是在当前shell进程中执行脚本
    • 如果脚本最后写了exit 命令,用 . source执行完成之后会退出终端,其它方式不会

    4、相关概念

    • usr 是 Unix System Resource的缩写
    • /usr/bin 文件夹下是系统预装的可执行程序,会随着系统升级而改变
    • /usr/local/bin目录是给用户放置自己的可执行程序的地方,推荐放在这里,不会被系统升级而覆盖同名文件。
    • 如果两个目录下有相同的可执行程序,/usr/local/bin优先于/usr/bin受到PATH环境变量的影响

    5、每个shell 最好写上exit 

            写上exit 主要是为了防止别的shell脚本引用当前的脚本,需要判断当前脚本的执行状态

    6、脚本参数相关

    ./para.sh 1 3   ===== 脚本执行 ,传入两个参数

    1. #!/bin/bash
    2. echo "\$@:$@"
    3. echo "\$0:$0"
    4. echo "\$1:$1"
    5. echo "\$2:$2"
    6. echo "\$#:$#"
    7. echo "==============\$@"
    8. for i in $@
    9. do
    10. echo $i
    11. done
    12. echo "==============\$*"
    13. for i in $*
    14. do
    15. echo $i
    16. done
    17. echo "==============\"\$@\""
    18. for i in "$@"
    19. do
    20. echo $i
    21. done
    22. echo "==============\"\$*\""
    23. for i in "$*"
    24. do
    25. echo $i
    26. done
    27. exit 0

    输出结果: 

    1. //===========输入
    2. ./para.sh 1 2
    3. //===========输出
    4. $@:1 2
    5. $0:./para.sh
    6. $1:1
    7. $2:2
    8. $#:2
    9. ==============$@
    10. 1
    11. 2
    12. ==============$*
    13. 1
    14. 2
    15. =============="$@"
    16. 1
    17. 2
    18. =============="$*"
    19. 1 2

    $@脚本的所有参数集合
    $*脚本的所有参数集合
    $#参数的个数
    $$当前进程号pid
    $?上个命令的退出状态,或函数的返回值
    $0指当前脚本以及脚本路径
    $1脚本中的第一个参数
    $2脚本中的第二个参数,依次类推 $n

    $@、$*、 “$@” 、"$*" 几种格式,只有 “$*” 会将参数合并成一行,其它都会将参数分开(见输出结果)。

    7、$ 和 ${}

    都可以用来引用变量,${ }可以指定变量边界,尤其是在变量是其它名字的一部分时要加上{}

    1. i=1
    2. echo $i
    3. #下面不会输出
    4. # echo $i_name
    5. echo ${i}_name

    8、[ ]与test

    [] 是test命令的一种简写形式

    1. if test -f /var/log/apport.log
    2. 等价于
    3. if [ -f /var/log/apport.log ]

    9、$[ ] 和 $(( ))

    $[] 是用来进行数学运算的,支持+-*%/。效果同$(())

    1. a=2
    2. b=3
    3. echo $[$a+$b]
    4. echo $(($a+$b))

    10、[[ ]]

    [ $score -le 100 ] && [ $score -gt 85 ] 等价于 [[ $score -le 100  &&  $score -gt 85 ]] ,双中括号之间不要有空格,[[ ]] 是shell中的关键字,不是命令,单中括号[],是test命令

    11、(())
     

    使用场景有如下:

    • $(())
    • 在for循环命令中控制循环,类似于c语言
    • 改变变量的值,且不需要$引用

    改变变量的值如下

    1. i=0
    2. let i++
    3. i=$i+1
    4. ((i++))

  • 相关阅读:
    Unity开发一个FPS游戏
    分布式文件系统FastDFS
    MFAN论文阅读笔记(待复现)
    2023/09/12 qt&c++
    ZHOJ_#20952. 最大公约数_数论
    java暴力回朔法解数独
    HIVE和HBASE的区别和联系
    2025汤家凤考研数学,基础视频课程+百度网盘+PDF真题讲解
    VSCode快速设置heder和main函数
    LNMP编译安装
  • 原文地址:https://blog.csdn.net/TSC1235/article/details/133844727