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 | 小于 |