最近看了一个shell编程入门的视频课,随手记下一些基础的语法,根据笔记整理出这篇文章,仅供小白入门。
首先感谢这位东北小哥的视频课程,讲的贼6,传送门http://edu.51cto.com/course/6068.html?source=so,想学shell或想学东北话的同学不能错过。
1. shell脚本的第一行
第一行一定是以 #! 开头,用来指定shell脚本解释器的路径,说白了就是告诉内核应该用啥东西来解释你这个脚本,好让机器明白要去做啥。视频里这位小哥写的是
#!bin/bash
而在我的工作机器上是
#!/usr/bin/env bash
显然不同机器的脚本解释器路径可能不相同。那么问题来了,我写一个脚本之前该怎么知道这个路径是啥?so easy,先打开现有的脚本瞅瞅~
写Java或C的同学可能会有在代码的顶部先写上一段注释的习惯,来标明作者、时间、代码的功能等。但在shell脚本中,第一行一定是#!开头的解释器路径,否则脚本将无法执行,即使第一行直接回车,把解释器路径写在第二行。shell脚本中注释的开头是#,但它并不会把第一行当成注释。
2. 变量及其赋值、使用
shell脚本是弱类型的语言,没有Java、C那样严格的数据类型,也没有作用域的概念。
变量的定义比较简单粗暴:变量名=变量值 即可。
num=123
name=ershazi
如上,定义了两个变量,变量num中存的是数字123,name中存的是字符串ershazi。这里又要注意了,等号两边不能有空格,随手写成num = 123是不对的。
上面这种简单粗暴的方法称为直接赋值。还有一种间接赋值,把用户输入的值赋给变量:
read -p "input a number:" num
这和下面的C++代码是一个道理:
int num = 0;
cout << "input a number:";
cin >> num;
不过由于变量的类型是由值决定的,而不是定义时指定,所以输入abc也会被赋值给num。实际应用中这里很有必要做输入值的校验。
使用变量很简单,$变量名 即可。
name=ershazi
echo $name
#输出:ershazi
3. 内置变量与位置变量
有些与系统配置、linux用户参数有关的变量,默认以变量的形式保存,这些变量最好不要去改动:
$UID 用户id $PATH 环境变量
还有些变量具有特定的写法,返回具有特定含义的值:
$0 当前脚本本身文件名 $x 第x个参数 $# 参数个数 $@ 所有参数
$? 上一条命令是否执行成功,成功返回0,失败返回非0值
$x、$#常用于获取执行脚本时传入的参数和参数个数验证,$?可以与exit x配合使用进行异常分析处理。
4. 打印段落
脚本中常常会一次输出多行指导用户操作的tips,当然可以通过多次