shell脚本就是一些文件,我们能将一系列需要执行的命令写入其中,然后通过shell执行。
shell脚本的执行
shell脚本通常是一个以shebang起始的文本文件:
#!/bin/bash
代表该脚本将由/bin/bash
解析执行
有两种运行脚本的方式。一种是将脚本作为bash的命令行参数另一种是授予脚本执行权限,将其变成科执行文件。
将脚本作为命令行运行方式如下:
$ bash script.sh
如果将脚本作为命令行参数使用则可以不使用shebang。
将脚本作为可执行文件来执行,需要现将其赋予执行权限:
$ chmod a+x script.sh
然后便可像下面这样执行:
$ ./script.sh
内核会读取脚本的首行并注意到shebang为
#!/bin/bash
。它识别出/bin/bash并在内部像这样执行该脚本:
$ /bin/bash script.sh
终端打印
终端是交互式工具,用户可以通过它与shell环境进行交互。
echo
在默认情况下,echo在每次调用后会添加一个换行符。
$ echo "Welcome to Bash"
Welcome to Bash
使用-n
参数可以忽略默认的换行。
$ echo -n 'Welcome to Bash'
Welcome to Bash%
不带双引号也可以打印出相同的结果:
$ echo Welcome to Bash
Welcome to Bash
使用单引号也可以完成相同的任务,但与双引号略有不同。
单引号是强引用,双引号是弱引用。
单引号里的所有内容会被全部照样输出,双引号会先进行必要的转义之后才会输出。
比如:
$ echo 'Welcome\nto\nBash'
Welcome\nto\nBash
$ echo "Welcome\nto\nBash"
Welcom
to
Bash
可以使用-e
参数强制转义输出:
$ echo -e 'Welcome\nto\nBash'
Welcom
to
Bash
printf
printf使用的参数和C语言中的printf函数一样。
$ printf "Hello World"
Hello World
printf可以使用格式化字符串,默认情况下printf不会像echo一样自动添加换行符。
#!/bin/bash
#filename: printf.sh
printf "%-5s %-10s %-4s\n" No Name Mark
printf "%-5s %-10s %-4.2s\n" 1 Sarath 80.3456
printf "%-5s %-10s %-4.2s\n" 2 James 90.9989
printf "%-5s %-10s %-4.2s\n" 3 Jeff 77.564
No Name Mark 1 Sarath 80.35 2 James 91.00 3 Jeff 77.56 %-5s 指明了一个格式为左对齐且宽度为5的字符串替换。如果不使用
-
指定对其方式,字符串就会采用右对齐形式。
变量、环境变量
查看进程相关变量:
cat /proc/$PID/environ
pgrep vim
# 获取vim进程的ID
cat /proc/$PID/environ | tr '\0' '\n'
# 优化输出
赋值
赋值
var='value'
# 不能写成var = 'value'
引用变量:
echo ${var}
可以在双引号中引用变量:
echo "$var"
设置环境变量
HTTP_PROXY=192.168.1.23.3128
expot HTTP_PROXY
在PATH中添加路径:
export PATH="$PATH:/home/usr/bin"
获取字符长度:
echo ${#var}
获取当前shell:
echo $SHELL
echo $0
在.bashrc中添加下面函数:
prepend() { [ -d "$2" ] && eval $1=\"$2\$\{$1:+':'\$$1\}\" && export $1; }
则可以直接这样添加路径:
prepend PATH /home/usr/bin