简介
Shell 是一个用 C 语言编写的程序,通过 Shell 用户可以访问操作系统内核服务
Shell 既是一种命令语言,又是一种程序设计语言
Shell script 是一种为 shell 编写的脚本程序;
Shell 编程一般指 shell脚本编程,不是指开发shell本身
Shell 编程跟Java,PHP编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以
Linux 的 Shell 解释器 种类众多,一个系统可以存在多个 shell,可以通过 cat/etc/shells 命令查看系统中安装的 shell 解释器
Bash 由于易用和免费,在日常工作中被广泛使用,同时,Bash也是大多数Linux系统默认的Shell。
Shell 解释器
Java需要 虚拟机解释器,同理 Shell脚本也需要
快速入门
编写脚本
新建 /tmp/hello.sh 文件
#!/bin/bash
echo 'hello world'
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪有种 Shell。
echo 命令用于向窗口输出文本
执行Shell脚本
方式一
-
问题: bash 和 sh 是什么关系?
sh 是 bash 的 快捷方式
方式二(简化方式一)
方式三
./文件名
Shell变量
1.简介
在shell脚本中,定义变量时,变量名不加 "$",如:
your_name="runoob.com"
注意:变量名和等号之间不能有空格。
同时,变量名的命名必须遵循如下规则:
- 命名只能使用英文字母,数字和下划线,收个字符不能以数字开头
- 中间不能有空格,可以使用下划线
- 不能使用标点符号
- 不能使用bash里的关键字(使用help命令查看保留关键字)
有效的Shell 变量名示例
RUNOOB
LD_LIBRARY_PATH
_var
var2
无效变量名
?var=123
user*name=runoob
除了显式地直接赋值,还可以用语句给变量赋值,如:
将 /etc 下目录的文件名循环出来
for file in `ls /etc`
或
for file in $(ls /etc)
2.使用变量
使用一个定义过的变量,只要在变量名前面加美元符号即可,如:
your_name="zhangsan"
echo $your_name
echo ${your_name}
变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:
for skill in java php python; do
echo "I am good at ${skill}Script"
done
如果不给skill变量加花括号,写成echo "I am good at $skillScript",
解释器就会把$skillScript当成一个变量(其值为空)。
已定义的变量,可以被重新定义,如:
your_name="tom"
echo $your_name
your_name="alibaba"
echo $your_name
3.删除变量
使用 unset 命令可以删除变量
语法
unset variable_name
变量被删除后不能再次使用,unset命令不能删除只读变量
示例
#!/bin/sh
myUrl="http://www.csdn.com"
unset myUrl
以上执行结果没有任何输出
4.只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
示例
#!/bin/sh
myUrl="http://www.csdn.com"
readonly myUrl
myUrl="http://www.baidu.com"
字符串
字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),
字符串可以用单引号,也可以用双引号,也可以不用引号
1.单引号
skill='java'
str='I am goot at $skill'
echo $str
执行结果
单引号字符串的限制:
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行)但可成对出现,作为字符串拼接使用。
2.双引号
skill='java'
str="I am goot at $skill"
echo $str
执行结果
双引号的优点: