Shell脚本相关命令
# 1. shell 和 shell 脚本
shell
是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。
shell脚本(shell script)
,是一种为 shell 编写的脚本程序。业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。由于习惯的原因,简洁起见,本文出现的 “shell 编程” 都是指 shell 脚本编程,不是指开发 shell 自身(如 Windows Explorer 扩展开发)。
#!/bin/env sh
cd ~
mkdir shell_tut
cd shell_tut
for ((i=0; i<10; i++)); do
touch test_$i.txt
done
2
3
4
5
6
7
8
上述第一行指明要用哪个解释器来执行, “#!”
是一个约定的标记
env
这里是为了提供跨系统的兼容性,使用 env 命令来找到 sh(Shell)的路径。env 是一个环境变量处理程序,可以在系统的 PATH 环境变量中查找 sh 的位置。
如果你直接写 #!/bin/sh 或 #!/bin/bash,那么脚本只会在 sh 或 bash 确实位于那个路径的系统上工作。这会降低脚本的可移植性,因为并非所有系统都将 Shell 安装在相同的位置。
# 2. 变量
# 2.1 定义变量
定义变量时,变量名不加美元符号($),如:
your_name="qinjx"
警告
注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。
除了显式地直接赋值,还可以用语句给变量赋值,如:
# 用于遍历/etc目录下的所有文件和目录,并将每个条目的名称赋值给变量file。
for file in /etc/*; do
echo "$file"
done
2
3
4
# 2.2 使用变量
使用一个定义过的变量,只要在变量名前面加美元符号即可,如:
your_name="qinjx"
echo $your_name
echo ${your_name}
2
3
变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:
for skill in Ada Coffe Action Java; do
echo "I am good at ${skill}Script"
done
2
3
如果不给 skill 变量加花括号,写成 echo "I am good at
# 2.3 重定义变量
已定义的变量,可以被重新定义,如:
your_name="qinjx"
echo $your_name
your_name="alibaba"
echo $your_name
2
3
4
5
# 3. 字符串
字符串是 shell 编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了,哈哈),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别跟 PHP 类似。
提示
- 单引号不能引用变量,双引号可以
- 单引号里面不能出现转义字符,双引号可以
# 3.1 拼接字符串
your_name="qinjx"
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
2
3
4
5
# 3.2 获取字符串 length
string="abcd"
echo ${#string} #输出:4
2
# 3.3 提取字符串
string="alibaba is a great company"
echo ${string:1:4} #输出:liba
2
# 3.4 查找字符串
string="alibaba is a great company"
echo `expr index "$string" is`#输出:3,这个语句的意思是:找出字母i在这名话中的位置,要在linux下运行,mac下会报错
2