shell脚本学习笔记(语法)

     shell脚本中的基本语法包括判断,条件,循环,函数,位置参数和特殊变量等等,下面我们就一一介绍吧


1.判断:test 语句 和 [ 

test语句和[ 都可以用于判断一条语句的真假,不过shell和c语言有区别,一定要切记在shell中:真返回0,假返回1

举个例子吧:

#!/bin/bash
val=10                                                                          
test $val -gt 9
echo $?

test $val -gt 10
echo $?

[ $val -gt 9 ] 
echo $?

[ $val -gt 10 ]
echo $?

               

还有一些测试命令是比较常用的:

[ -d DIR ] : 如果DIR存在并且是一个目录则为真
[ -f FILE ] : 如果FILE存在且是一个通文件则为真
[ -z STRING ] : 如果STRING的长度为零则为真
[ -n STRING ] : 如果STRING的长度非零则为真
[ STRING1 = STRING2 ] : 如果两个字符串相同则为真
[ STRING1 != STRING2 ] : 如果字符串不相同则为真
我测试代码如下:

#!/bin/bash
[ -d script.sh ]  #是否是目录
echo $?
[ -f script.sh ]  #普通文件
echo $?
STRING="" 
[ -z STRING ]  #string的长度为0则真
echo $?
[ -n STRING ] #stirng长度非0则真
echo $?
STRING1="haha"
STRING2="hehe"
[ STRING1 = STRING2 ] #两字符串长度是否相等
echo $?
[ STRING1 != STRING2 ] #两字符串长度不等返回真
echo $?
[ ! -d script  ] #非
echo $?
[  -n STRING  -a  -z STRING  ] #与
echo $? 
[  -n STRING  -o  -z STRING  ] #或
echo $?


2.条件:if/then/elif/else/fi语句,这是shell里面的if语句,废话不多说,请看代码:

#!/bin/bash
if [ -d script.sh ];then
        echo "is dir"
elif [ -f script.sh ]
    then
        echo "is file"
fi

if : ;then
        echo "/ is always true"
fi

echo "please input your id:"
read id
echo "please input your password"
read password


if [ ${id} -eq 1 ];then
        if [ ${password} -eq 2 ];then
                echo "you are right"
        else
                 echo "error"
        fi  
else
        echo "try again"
fi

     需要注意if语句的格式,如果两条命令写在同一行则需要用;号隔开,一行只写一条命令就不需要写;号了, 另外,

then后面有换行,但这条命令没写完,Shell会自动续行,把下一行接在then后面当作一条命令处理。和[命令一样,

要注意命令和各参数之间必须用空格隔开。:是一个特殊的命令,称为空命令,该命令不做任何事,但Exit Status总是真。

case/esac语句,和C语言的switch语句类似,其语法如下:

#!/bin/bash
read val 
case $val in
        a)  
        echo "it is a"
        ;;  
        b)  
        echo "it is b"
        ;;  
esac

其中read命令的作用是等待用户输入一行字符串,将该字符串存到一个Shell变量中


3.循环语句

循环语句常见的有for,while等等

#!/bin/bash
for i in {a..z}
do
        echo "printf val is: $i"
done

for ((i=0;i<10;i++))
do
        echo "print val is:$i"
done

4.位置参数和特殊变量:

echo $0       #可执行文件名 ,相当于C语言main函数的argv[0]   
echo $1 $2  #这些称为位置参数(Positional Parameter),相当于C语言main函数 的argv[1]、argv[2]...
echo $#    #相当于C语言main函数的argc - 1,注意这里的#后面不表示注释(不包扩可执行文件名)
echo $$    #当前shell的进程id
echo $!     # Shell最后运行的后台Process的PID
echo $@    #表示参数列表"$1" "$2" ...(不包括 $0 ),例如可以用在for循环中的in后面。
echo $?      #退出码,上一条命令的Exit Status
    位置参数可以用shift命令左移。比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等 等,
原来的$1、$2、$3丢弃,$0不移动。不带参数的shift命令相当于shift 1
#!/bin/bash
echo "$0 is done"
echo "$1 is done"
bash $1 &
echo "$#"
echo "$@"
echo "$$"
echo "$!"
echo "$?"
for val in $@
do
        echo "$val"
done


5.函数

shell中也有函数,和C语言中是有区别的:

        (1).函数定义中没有返回值也没有参数列表

        (2).注意函数体的左花括号{和后面的命令之间必须有空格或换行,如果将最后一条命令和右花括
号}写在同一行,命令末尾必须有;号

        (3).Shell脚本中的变量不必先定义后使用但是函数必须先定义后调用

        (4).Shell函数中可以有参数,调用函数时可以传任意个参数,在函数内同样是用$0、$1、$2等变

量来提取参数

#!/bin/bash
fun()
{ 
        bash $1
        echo "$2"
        echo "haha i'am called"
}
fun test.sh 100 


以上是基本的语法了,最后我还要说的就是shell脚本的调试

   Shell提供了一些用于调试脚本的选项,如下所示:
         -n 读一遍脚本中的命令但不执行,用于检查脚本中的语法错误
         -v 和 -x  提供跟踪执行信息,将执行的每一条命令和结果依次打印出来

使用这些选项有三种方法,
一是在命令行提供参数
    $ sh -x ./script.sh
二是在脚本开头提供参数
    #! /bin/sh -x

第三种方法是在脚本中用set命令启用或禁用参数
     set -x和set +x分别表示启用和禁用-x参数,这样可以只对脚本中的某一段进行跟踪调试。

#!/bin/bash -x
fun()
{ 
        bash $1
        echo "$2"
        echo "haha i'am called"
}
fun test.sh 100 


      好了,完了,如果大家有什么见解的话可以留言,但是我这里将到的还只是shell语法的冰山一角,

希望想深入研究的人可以多搜集资料或者阅读相应书籍来达到目标,最后,祝大家编程快乐。


第1章 BashShell命令 6 1.1 Shell提示符 6 1.2 文件与目录Shell命令 7 1.2.1 更改目录命令(cd) 7 1.2.2 列表命令(ls) 7 1.2.3 操作文件命令 10 1.2.4 目录处理命令 14 1.2.5 查看文件内容命令 15 1.3 监控程序 20 1.3.1 进程查看 20 1.3.2 实时进程监控 22 1.3.3 停止进程 24 1.4 监控磁盘空间 25 1.4.1 挂载介质 25 1.4.2 使用df命令 26 1.4.3使用du命令 27 1.5 操作数据文件 28 1.5.1 数据排序(sort) 28 1.5.2 搜索数据 (grep) 30 1.5.3 压缩数据 30 1.5.4 归档数据(tar) 33 1.6 使用Linux环境变量 34 1.6.1 设置环境变量 34 1.6.2 默认的shell环境变量与path变量的设置 37 1.7 Linux文件权限 40 1.7.1 Linux安全性 40 1.7.2 使用Linux用户组 46 1.7.3 解码文件权限 47 1.7.4 修改安全设置 49 1.8 vim编辑器 52 第2章 基本脚本编译 54 2.1 创建脚本与使用变量 54 2.1.1 创建脚本 54 2.1.2 使用变量 55 2.2 重定向输入输出与数学计算 57 2.2.1 输出重定向 57 2.2.2 输入重定向 58 2.2.3 管道 58 2.2.4 数学计算 58 2.3 退出脚本 60 第3章 结构化命令 61 3.1 if语句 61 3.1.1 if-then语句 61 3.1.2 if-then-else语句 61 3.1.3 嵌套if语句 62 3.2 if条件语句 63 3.2.1 数值比较 63 3.2.2字符串比较 64 3.2.3 文件比较 65 3.2.4 复合条件检查 65 3.3 if-then的高级特征与case命令 66 3.3.1 使用双圆括号 66 3.3.2 使用双方括号 67 3.3.3 case命令 67 3.4 for命令 67 3.4.1 读取列表 68 3.4.2 读取变量与读取命令 69 3.4.3 改变字段分隔符与使用通配符读取目录 69 3.4.5 C式的for命令 70 3.5 while、until命令 71 3.5.1 使用多条测试命令 71 3.5.2 until命令与循环嵌套 72 3.6 文件数据的循环与控制循环 73 3.6.1 文件数据的循环 73 3.6.2 break命令 73 3.6.3 continue命令 75 第4章 处理用户输入与显示数据 76 4.1 命令行参数与特殊的参数变量 76 4.1.1 读取参数 76 4.1.2 读取程序名称 77 4.1.3 测试参数 77 4.1.4 参数计数 77 4.1.5 获取所有数据 78 4.2 移位与选项 79 4.2.1 移位 79 4.2.2 找出选项 79 4.2.3 使用getopt命令 81 4.2.4 更高级的getopts命令 83 4.2.4 标准化选项 84 4.3 获取用户输入 84 4.3.1 基本读取 84 4.3.2 计时 85 4.3.3 默读与文件读取 85 4.4 显示数据 86 4.4.1 标准文件描述符 86 4.4.2 重定向错误 87 4.4.3 临时重定向 88 4.4.4永久重定向 88 4.4.5 在脚本中重定向输入 89 4.5 创建自己的重定向 90 4.5.1 创建输出文件描述符 90 4.5.2 重定向文件描述符 90 4.5.3 创建输入文件描述符 91 4.5.4 创建读取/写入文件描述符 91 4.5.5 关闭文件描述符 92 4.5.6列出开发文件描述符 92 4.5.7禁止命令输出 94 4.6 使用临时文件 94 4.6.1 创建本地临时文件 94 4.6.2 在/temp中创建临时文件 95 4.6.3 创建临时目录 96 4.6.4 记录消息 96 第5章 脚本控制 97 5.1 处理信号 97 5.1.1 Linux信号回顾 97 5.1.2 生成信号 97 5.1.3捕获信号 99 5.1.4捕获脚本退出 99 5.1.4移除捕获 100 5.2 以后台模式运行脚本 100 5.3 作业控制 102 5.3.1查看作业 102 5.3.2重新启动停止的作业 103 5.4 nice与renice命令 104 5.4.1 nice命令 104 5.4.2 renice命令 104 5.5 定时运行脚本 105 5.5.1使用at命令调度作业 105 5.5.2使用batch命令调 107 5.5.3 调用定期脚本 107 5.6 从头开始 109 5.6.1在启动时启动脚本 109 5.6.2随新shell一起启动 109 第6章 创建函数 110 6.1 基本脚本函数 110 6.1.1 创建函数 110 6.1.2 使用函数 110 6.2 返回值 111 6.2.1 默认退出状态 111 6.2.2 使用return命令 111 6.2.3 使用函数输出 112 6.3 在函数中使用变量 112 6.3.1 向函数传递参数 112 6.3.2 在函数中处理变量 113 6.4 数组变量与函数 114 6.4.1 向函数传递数组 114 6.4.2从函数返回数组 115 6.5 函数递归与创建库 116 6.5.1函数递归 116 6.5.2 创建库 116 6.6 在命令行中使用函数 117 6.6.1在命令行创建函数 117 6.6.2在.bashrc文件中定义函数 117 6.7 select命令使用 119 第7章 sed、gawk介绍与正则表达式 120 7.1 sed编辑器 120 7.1.1 在命令行中定义编辑器命令 120 7.1.2 在命令行中使用多个编辑器命令 121 7.1.3 从文件读取编辑器命令 121 7.2 gawk程序 122 7.2.1 gawk命令格式 122 7.2.2 自命令行读取程序脚本 122 7.2.3 使用数据字段变量 123 7.2.4 在程序脚本中使用多个命令 124 7.2.5从文件读取程序 124 7.2.6 在处理数据之前运行脚本 125 7.2.7 在处理数据之后运行脚本 125 7.3 sed编辑器基础知识 126 7.3.1 更多替换选项 126 7.3.2 使用地址 127 7.3.3 删除行 128 7.3.4 插入和附加文本 129
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值