Shell 教程
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
第一个shell脚本
第一步:创建脚本文件
使用touch命令新建一个文件 demo.sh,扩展名为 sh(sh代表shell),扩展名可以清楚知道是脚本文件,没有也无影响。
第二步:编写脚本文件内容
输入一些代码,第一行一般是这样:
#!/bin/bash
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。有三种shell解释器,分别是sh、ash、bash。
echo "Hello World !"
echo 命令用于向窗口输出文本,其中#后为注释内容。
第三步:权限修改
一般启动脚本时要赋予脚本文件执行权限 使用权限修改命令chmod
chmod 777 demo.sh
或者仅加上执行权限
第四步:执行脚本
第一种执行方式
./demo.sh
第二种执行方式
bash demo.sh
第三种执行方式
. demo.sh
输出结果都为
不同点:./和bash执行过程基本一致,后者指定使用bash解释器执行脚本,脚本中的#!不起作用前者首先检测#!,使用指定的shell,如果没有则使用默认的shell,用这两者去执行会在后台启动一个新的shell去执行脚本,而用. 去执行则由当前的shell去解释执行脚本。
shell中的变量
shell中定义变量无需数据类型 期间不可加空格符号 取变量值为 $变量名
#!/bin/bash
# #!用于指定当前脚本文件的shell解释器 不写默认
num=100
i=num
#可以赋值给另一个变量
echo "$i"
# $变量为取变量的值
echo "$num"
#打印输出变量的值
unset num
#清除变量
echo "$num"
#变量已经清除 输出空
read string
#从键盘是输入一个字符串赋值给变量string
echo "str=$string"
#输出字符串
readonly val=10
#创建一个只读的变量 不可清除修改 只能在定义时初始化
val=100
输入 hello 输出结果如下:
环境变量的设置
语法(尽量大写)
VAR=value
export VAR
- 在终端上输入环境变量为临时变量 当会话关闭或者重启时消失
- 一般在 ~/.bashrc或者/etc/porfile文件中 允许用户更改 更改后不会立即生效 可以使用source命令
环境变量等于程序设计语言的全局变量 可以在所有的shell中使用
预设变量
$0为进程名字 $1 $2 ... $9 为输入的参数
当需要传入10个以上时可以使用 ${10} 依此类推
$#:保存命令行传入的参数个数但不包括$0
$*或者$@为所有命令行传入的参数但不包括$0
$$:获取当前进程号
$?:返回上一条命令的执行结果 成功为0 失败则非0
示例
echo "$0"
echo "$1"
echo "$2"
echo "$#"
echo "$*"
echo "$$"
ls aaa
#目录下没有这个文件
echo "$?"
ls demo.sh
echo "$?"
输出如下: 想查看进程号可使用read等待输入打开一个新的会话使用ps查看对应的进程号
脚本变量的特殊用法
""(双引号):包含的变量会被解释
'' (单引号):包含的变量会被当做字符串解释
``(ESC下):反引号的内容作为系统命令,并执行其内容,可以替换输出为一个变量
$ echo " today is `date`"
输出结果:
\转义字符:同c语言\n \t \r \a 等echo命令需加 -e转义
(命令序列):由子shell完成,不影响当前shell中的变量
{命令序列} :在当前shell中执行,会影响当前变量
脚本代码
#!/bin/bash
# #!用于指定当前脚本文件的shell解释器 不写默认
name="lisi"
string1="hello,$name"
#双引号里面的特殊字符,会使用其特殊含义
string2='hello,$name'
#单引号里当成字符串解释
echo $string1
echo $string2
echo -e "this \n is\t a \n text"
num=100
(num=999; echo "1 $num")
echo "2 $num"
运行结果: