shell脚本基础应用

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 小于
上一篇
下一篇