shell属于一种很容易学习的程序设计语言,依赖于功能强大的命令可以编写提高开发效率的脚本。这里记录一下常用的shell相关的知识点。 持续更新中。。。
- echo $SHELL
- /bin/bash
shell是一种脚本语言,就会有解释器来执行这些脚本。
Unix/Linux上常见的Shell脚本解释器有bash、sh、csh、ksh等,习惯上把它们称作一种Shell。我们常说有多少种Shell,其实说的是Shell脚本解释器。
在编写好的脚本运行时可能会报错,具体会提示哪行有错,通过vim进行命令行模式,
输入 :set nu 会显示代码行,再输入 报错行 + 回车就会定位到报错的行。
:set nu
在linux系统的桌面上创建了一个demo.sh,用来测试 ,sh的权限在移动过程中可能会更改,这个要注意下。
- #!/bin/bash
-
- echo shell
-
- 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 |
source
和 .
两种执行方式都是在当前shell进程中执行脚本写上exit 主要是为了防止别的shell脚本引用当前的脚本,需要判断当前脚本的执行状态
./para.sh 1 3 ===== 脚本执行 ,传入两个参数
- #!/bin/bash
-
- echo "\$@:$@"
- echo "\$0:$0"
- echo "\$1:$1"
- echo "\$2:$2"
- echo "\$#:$#"
-
- echo "==============\$@"
- for i in $@
- do
- echo $i
- done
-
- echo "==============\$*"
- for i in $*
- do
- echo $i
- done
-
- echo "==============\"\$@\""
- for i in "$@"
- do
- echo $i
- done
-
- echo "==============\"\$*\""
- for i in "$*"
- do
- echo $i
- done
- exit 0
输出结果:
- //===========输入
- ./para.sh 1 2
- //===========输出
- $@:1 2
- $0:./para.sh
- $1:1
- $2:2
- $#:2
- ==============$@
- 1
- 2
- ==============$*
- 1
- 2
- =============="$@"
- 1
- 2
- =============="$*"
- 1 2
$@ | 脚本的所有参数集合 |
$* | 脚本的所有参数集合 |
$# | 参数的个数 |
$$ | 当前进程号pid |
$? | 上个命令的退出状态,或函数的返回值 |
$0 | 指当前脚本以及脚本路径 |
$1 | 脚本中的第一个参数 |
$2 | 脚本中的第二个参数,依次类推 $n |
$@、$*、 “$@” 、"$*" 几种格式,只有 “$*” 会将参数合并成一行,其它都会将参数分开(见输出结果)。
都可以用来引用变量,${ }可以指定变量边界,尤其是在变量是其它名字的一部分时要加上{}
- i=1
-
- echo $i
- #下面不会输出
- # echo $i_name
- echo ${i}_name
[] 是test命令的一种简写形式
- if test -f /var/log/apport.log
- 等价于
- if [ -f /var/log/apport.log ]
$[] 是用来进行数学运算的,支持+、-、*、%、/。效果同$(())
- a=2
- b=3
- echo $[$a+$b]
- echo $(($a+$b))
[ $score -le 100 ] && [ $score -gt 85 ] 等价于 [[ $score -le 100 && $score -gt 85 ]] ,双中括号之间不要有空格,[[ ]] 是shell中的关键字,不是命令,单中括号[],是test命令
使用场景有如下:
改变变量的值如下
- i=0
-
- let i++
- i=$i+1
- ((i++))