shell 脚本基础应用
一、脚本执行
-
编写一个最简单的脚本并保存在 /opt/learn/helloworld.sh 下
#!/usr/bin/bash #这是一个最简单的shell脚本(注释) echo "Hello" -
使用如下命令运行 helloworld.sh
. helloworld.sh sh helloworld.sh bash helloeorld.sh source helloworld.sh chmod u+x helloworld.sh ./helloworld.sh
二、传递参数给 shell 脚本
命令 | 作用 |
---|---|
echo "Hello,$1 $2 $3" | 程序体输出 Hello 后面带三个参数的值 |
sh hello.sh Denny Bill Mary | 运行时会输出 Hello,Denny,Dill,Mary |
$1 | 代表第一个参数 |
$2 | 代表第二个参数 |
…… | 以此类推,但不能超过 9 个参数 |
$0 | 特殊的,$0 表示该 shell 脚本的名称 |
三、引号的特殊用法
命令 | 作用 |
---|---|
echo "$1" | 输出第一个参数的值 |
echo '$1' | 输出 $1 |
echo 'date' | 输出 date |
echo \date |
输出当前时间(这里使用的是~下面的反引号而不是单引号) |
now=\date "+%Y-%m-$d %H:%M:%S" |
格式化输出时间,同时赋值 |
四、特殊用法
1. 特殊变量
命令 | 作用 |
---|---|
$# | 传递到脚本的参数个数 |
$0 | 脚本的名称 |
$* | 以一个单字符串的形式显示所有向脚本传递的参数,与位置变量不同,此项参数可以超过 9 个 |
$$ | 脚本运行的当前进程 ID 号 |
$! | 后台运行的最后一个进程的进程 ID 号 |
$@ | 与 $* 相同,但是使用时加引号,并在引号中返回每个参数 |
$? | 显示最后命令的退出状态,0 表示正确,其他任何值表示错误 特别的:在脚本中可自定义 0~255 的退出状态码 |
$_ | 代表上一个命令的最后一个参数,如果上一个命令是 echo, 则这个参数就是 echo 显示的内容 |
-
理解 * 与 @的区别
function testargs { echo "There is $# args" echo $10 } testargs "$*" testargs "$@" # $*的结果是所有参数构成一个字符串:"11 22 33 44" # $@的结果是每一个参数单独加上引号:"11" "22" "33" "44"
2. expr 表达式
命令 | 作用 |
---|---|
expr 10 + 10 | expr 是一个手工计算器,此处会输出 20(注意空格) |
expr 10+10 | 此处会输出 10+10 |
expr 10.1 + 1 | expr 不能处理小数 |
expr "hello"="hello" | 成功返回 1,失败返回 0 |
练习: | 使用 echo 命令输出一句话:300/5*6=360, 其中 360 由运算得到:echo "300/5*6=\expr 300 \/ 5 \* 6 " (要加转义符) |
五、test 命令
1. test 文件
命令 | 作用 |
---|---|
test -e /etc/passwd | 测试文件 /etc/passwd 是否存在,存在则 $? 返回 0,否则返回 1 |
[ -e /etcc/passwd ] | 与 test -e /etc/passwd 作用一样,注意空格 |
-d file | 如果文件为一个目录,则为真 |
-e file | 如果文件存在,则为真 |
-f file | 如果文件为一个普通文件,则为真 |
-r file | 如果文件可读则为真 |
-w file | 如果文件可写,则为真 |
-x file | 如果文件可执行,则为真 |
-s file | 如果文件长度不为 0,则为真 |
-L file | 如果文件为符号文件,则为真 |
2. 逻辑处理
命令 | 作用 |
---|---|
-e /etc/passwd -a -r /etc/passwd | 逻辑与,操作符两边均为真,结果为真,否则为假 |
-e /etcc/passwd -o -r /etc/passwd | 逻辑或,操作符两边一边为真,结果为真,否则为假 |
! -e /etc/passwd | 逻辑否,条件为假,结果为真 |
3. test 字符串
命令 | 作用 |
---|---|
$USER = "root" | 字符串比较 |
"$USER" = "root" | 建议使用此种方式 |
= | 等于 |
!= | 不等于 |
-z | 为空字符串 |
-n | 非空字符串 |
4. test 数值
命令 | 作用 |
---|---|
[ $$ -eq 18646 ] | 对数值的测试 |
-eq | 数值相等 |
-ne | 数值不等 |
-le | 第一个数小于等于第二个数 |
-ge | 大于等于 |
-gt | 大于 |
-lt | 小于 |