zoukankan      html  css  js  c++  java
  • Linux九阴真经之催心掌残卷7(shell脚本)

    shell脚本

    1 .创建shell脚本

    第一步:使用文本编辑器来创建文本文件(后缀需要加 .sh)

    第一行必须包括shell声明序列:#! #!/bin/bash 添加注释 注释以#开头 

    第二步:运行脚本 给予执行权限,在命令行上指定脚本的绝对或相对路径 直接运行解释器,将脚本作为解释器程序的参数运行

    shell脚本的调试

    bash -n +脚本 检查脚本的语法错误

    bash -x +脚本 调试执行脚本

    脚本写完后需要加上执行权限:chmod +x 脚本名

    定义变量

    变量的命名:1、不能使程序中的保留字:例如if, for

    2、只能使用数字、字母及下划线,且不能以数字开头

    3、见名知义

    4、统一命名规则:驼峰命名法 (又分为大小驼峰:大驼峰;每个单词的首字母都要大写  小驼峰;除了首个单词首字母不需要大写外其他单词的首字母都要大写)

    变量的种类:

    局部变量:生效范围为当前shell进程;对当前shell之外的其它shell进程,包括 当前shell的子shell进程均无效(即使在子进程将变量更改后重新定义为全局变量,父进程的变量也不会更改)

    环境(全局)变量:生效范围为当前shell进程及其子进程 (将局部变量生成全局变量用export +变量名)

    本地变量:生效范围为当前shell进程中某代码片断,通常指函数

    位置变量:$1, $2, …来表示,用于让脚本在脚本代码中调用通过命令行传递给它 的参数

    特殊变量:$?, $0(脚本的名称), $*(所有的参数), $@, $#(参数的个数),$$

    变量的删除 :unset + 加变量名

    只读和位置变量  只读变量:只能声明,但不能修改和删除 

    声明只读变量: readonly name declare -r name  查看只读变量: readonly –p 

    位置变量:在脚本代码中调用通过命令行传递给脚本的参数

    $1, $2, …:对应第1、第2等参数,shift [n]换位置

    $0: 命令本身 $*: 传递给脚本的所有参数,全部参数合为一个字符串

    $@: 传递给脚本的所有参数,每个参数为独立字符串

    $#: 传递给脚本的参数的个数

    $@ $* 只在被双引号包起来的时候才会有差异

    set — 清空所有位置变量

    进程使用退出状态来报告成功或失败 0 代表成功,1-255代表失败 (用echo $?来执行显示)

    bash自定义退出状态码 exit [n]:自定义退出状态码 注意:脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命 令后面的数字

    算术运算 bash中的算术运算:help let

    +, -, *, /, %取模(取余), **(乘方)

    实现算术运算:

    (1) let var=算术表达式

    (2) var=$[算术表达式]

    (3) var=$((算术表达式))

    (4) var=$(expr arg1 arg2 arg3 …)

    (5) declare –i var = 数值

    (6) echo ‘算术表达式’ | bc 

    乘法符号有些场景中需要转义,如* 

    bash有内建的随机数生成器:$RANDOM(0-32767)

    echo $[$RANDOM%50] :0-49之间随机数

    赋值 增强型赋值:

    +=, -=, *=, /=, %= 

    let varOPERvalue 例如:let count+=3

    自加3后自赋值 

    自增,自减:

    let var+=1

    let var++

    let var-=1

    let var–

    与和或

    & 并且 and | 或者 or

    0&0=0 0&1=0 1&0=0 1&1=1

    0|0=0 0|1=1 1|0=1 1|1=1

    短路与 && 短路或 ||

    0&&0=0        0||0=0 0&&1=0         0||1=1

    1&&0=0        1||0=1 1&&1=1          1||1=1

    cmd1 && cmd2 如果cmd1为假,cmd2不需要执行,反之cmd1为真,需要cmd2执行

    cmd1 || cmd2 如果cmd1为真,cmd2不需要执行,反之cmd1为假,需要cmd2执行

    XOR 异或

    0^1=1 0^0=0 1^0=1 1^1=0

    10

    11 01

    a=100

    b=110 c=010 100=a

    test条件测试语句

     长格式的例子: test “$A” = “$B” && echo “Strings are equal” test “$A”-eq “$B” && echo “Integers are equal” 

    简写格式的例子: [  “$A” = “$B”  ] && echo “Strings are equal” [ “$A” -eq “$B” ] && echo “Integers are equal

    数值测试:

    -gt 是否大于            ( [ $a -gt 12 ]既$a是否大于12)

    -ge 是否大于等于

    -eq 是否等于

    -ne 是否不等于

    -lt 是否小于

    -le 是否小于等于

    -v (可以查看变量是否被设置例如[  -v  a ]  && echo ” set “如果被设置则显示set其中变量a不需要加$符号 )

    一般一个[  ]就可以但在正则表达式中需要用[[   ]]其中括号与内容要用空格隔开

    bash的字符串测试 字符串测试:

    = 是否等于

    > ascii码是否大于ascii码

    < 是否小于

    != 是否不等于

    =~ 左侧字符串是否能够被右侧的PATTERN所匹配 注意: 此表达式一般用于[[ ]]中;扩展的正则表达式

    -z “STRING“ 字符串是否为空,空为真,不空为假

    -n “STRING“ 字符串是否不空,不空为真,空为假 

    注意:用于字符串比较时的用到的操作数都应该使用引号

    Bash的文件测试 存在性测试

    -a FILE:同-e -e FILE: 文件存在性测试,存在为真,否则为假 存在性及类别测试

    -b FILE:是否存在且为块设备文件

    -c FILE:是否存在且为字符设备文件

    -d FILE:是否存在且为目录文件

    -f FILE:是否存在且为普通文件

    -h FILE 或 -L FILE:存在且为符号链接文件

    -p FILE:是否存在且为命名管道文件

    -S FILE:是否存在且为套接字文件

    文件权限测试:

    -r FILE:是否存在且可读

    -w FILE: 是否存在且可写

    -x FILE: 是否存在且可执行 

    文件特殊权限测试:

    -u FILE:是否存在且拥有suid权限

    -g FILE:是否存在且拥有sgid权限

    -k FILE:是否存在且拥有sticky权限

     使用read命令来接受输入 (默认功能是对变量赋值 例如read name;之后输入2 ;echo $name )

    使用read来把输入值分配给一个或多个shell变量

    -p 指定要显示的提示

    -s 静默输入,一般用于密码

    -n N 指定输入的字符长度N

    -d ‘字符’ 输入结束符

    -t N TIMEOUT为N秒 read 从标准输入中读取值,给每个单词分配一个变量

    所有剩余单词都被分配给最后一个变量 read -p “Enter a filename: “ FILE

    bash的配置文件 按生效范围划分,存在两类: 

    全局配置:(对所有用户都有效)

    /etc/profile

    /etc/profile.d/*.sh

    /etc/bashrc

    个人配置:

    ~/.bash_profile

    ~/.bashrc

  • 相关阅读:
    轻量级数据库sqlite的使用
    Integer引发的思考
    css限制显示行数
    数据库 chapter 17 数据仓库与联机分析处理技术
    数据库 chapter 15 对象关系数据库系统
    数据库 chapter 16 XML数据库
    数据库 chapter 14 分布式数据库系统
    数据库 chapter 11 并发控制
    数据库 chapter 12 数据库管理系统
    数据库 chapter 13 数据库技术新发展
  • 原文地址:https://www.cnblogs.com/huxiaojun/p/8834940.html
Copyright © 2011-2022 走看看