shell基础
shell脚本
shell脚本(shell script),是一种为shell编写的脚本程序,但是shell和shell script是两个不同的概念。shell编程一般指shell脚本编程,不是指开发shell本身。
shell环境
shell编程和JavaScript、php编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。 Bourne shell /usr/bin/sh /bin/sh Bourne Again shell /bin/bash ...... bash也是大多数linux系统默认的shell
第一个shell脚本
#! /bin/bash
echo "hello world"
运行shell脚本的两种方式
- 作为可执行程序
chmod +x ./test.sh # 使脚本具有执行权限
./test.sh # 执行脚本
注意,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin,/sbin,/usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。
- 作为解释器参数 这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:
/bin/sh test.sh
/bin/php test.php
shell变量
定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:
your_name="iflytek.com"
注意变量名和等号之间不能有空格; 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头; 中间不能有空格,可以使用下划线; 不能使用标点符号; 不能使用bash里面的关键词,可用help查看保留关键字;
除了显式地直接赋值,还可以用语句给变量赋值,如:
for file in 'ls /etc'
或
for file in $(ls /etc)
以上语句将 /etc 下目录的文件名循环出来。
使用变量
使用一个定义过的变量,只需要在变量名前面加美元符号即可,如:
name="jin"
echo $name
echo ${name}
变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:
for skill in Ada Coffee Action Java; do
echo "I am good at ${skill} script"
done
已被定义的变量,也可以被重新定义:
name="Tom"
echo $name
name="Jin"
echo $name
只读变量 使用readonly命令可以将变量定义为只读变量,只读变量的值不可以被改变。
myUrl="https://www.google.com"
readonly myUrl
myUrl="https://www.iflytek.com"
尝试更改只读变量会出现报错。
删除变量
使用unset命令可以删除变量
myUrl="https://www.iflytek.com"
unset myUrl
echo $myUrl
变量类型
- 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
- 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
- shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行