第一个Shell脚本
test.sh内容
#! /bin/bash
#告诉系统用什么解释器执行
#井号为注释
echo "what's your name?"
#echo命令打印输出
read name
#read命令读取键盘输入
echo "hello $name"
运行shell两种方法:
- 作为可执行程序
chmod +x ./test.sh
加可执行权限
./test.sh
作为二进制程序运行要加./
告诉系统在当前目录下查找 - 作为解释器运行的参数
/bin/bash test.sh
Shell变量
定义变量
var1="value"
变量名和等号之件不能有空格
使用变量
echo ${var1}
变量名前加美元符号,花括号用于限定边界,防止二义性
重新定义变量
var1="null"
只读变量
readonly var1
使用readonly命令把变量var1
设置为只读;
这时无法给变量重新赋值
删除变量
unset var2
使用uset命令删除变量,注意,unset不能删除只读变量
变量类型
1)局部
2)环境
3)shell变量
Shell中特殊变量
变量 | 含义 |
---|---|
$ | 当前shell进程ID |
0 | 脚本文件名 |
n | 传递给基本的第n个参数 |
# | 传递给脚本的参数个数 |
* | 传递给脚本的所有参数,被双引号包含时”“,与@有所不同,*会将所有参数当做一个整体 |
@ | 传递给脚本的所有参数,被双引号包含时”“,与*有所不同,@会将参数分割开来 |
? | 上个命令的退出状态,或者函数的返回值 成功0 失败1 |
例子
test.sh内容如下
#! /bin/bash
echo "current file name:$0"
echo "first parameter:$1"
echo "second parameter:$2"
echo "all parameters:$@"
echo "all parameters:$*"
echo "total numbers of parmeters:#"
执行./test.sh bxb lsy
后结果
current file name:./test.sh
first parameter:bxb
second parameter:lsy
all parameters:bxb lsy
all parameters:bxb lsy
total numbers of parmeters:#
Shell替换
转义字符
转义字符 | 含义 |
---|---|
\\ | 反斜杠 |
\a | 警报,响铃 |
\b | 退格,删除键 |
\f | 换页(FF),将当前位置移动到下页开头 |
\n | 换行 |
\r | 回车 |
\t | tab,水平制表符 |
\v | 垂直制表符 |
使用时echo -e "换行前\n换行后"
加参数-e
使用转义,加上-E
禁用转义
命令替换
命令替换指Shell可以先执行命令,将命令结果保存在变量中,再在合适的地方输出
使用方法 反引号将要执行的命令扩起来
DATE=`date`
#这里date是shell命令,获取当前时间,用反引号括起来,执行结果保存在变量DATE中
echo $DATE
变量替换
变量替换可以根据变量的状态(是否为空 是否定义)来改变它的值
可以使用变量替换的形式
形式 | 说明 |
---|---|
var | 使用变量本身的值 |
var:-word | 如果变量var为空或已被删除(unset),那么返还word,不改变 |
var:=word | 如果变量var为空或被unset,返回word,并将var设为word |
var:?message | 如果var为空或被unset,那么将消息message送到标准错误输出,可以用来检测变量是否被正常赋值;若此替换出现在Shell脚本中,脚本将停止运行 |
var:+word | 如果变量已被定义,返回word,但不改变变量的值 |
Tips: | 变量替换都在var为空或unset情况下执行,如果var已被设置,将直接输出变量 |
例子
test.sh内容如下
#!/bin/bash
echo ${var:-"Variable is not set"}
echo "1 - Value of var is ${var}"
echo ${var:="Variable is not set"}
echo "2 - Value of var is ${var}"
unset var
echo ${var:+"This is default value"}
echo "3 - Value of var is $var"
var="Prefix"
echo ${var:+"This is default value"}
echo "4 - Value of var is $var"
echo ${var:?"Print this message"}
echo "5 - Value of var is ${var}"
执行./test.sh
后结果
Variable is not set
1 - Value of var is
Variable is not set
2 - Value of var is Variable is not set
3 - Value of var is
This is default value
4 - Value of var is Prefix
Prefix
5 - Value of var is Prefix