shell总结
env 查看环境变量
set 显示环境变量(包括局部变量) 设置环境变量:export 变量名=value 变量名=value,export 变量名 取消变量 unset 变量名 环境变量的初始化过程: 先加载/etc/profile 全局变量文件 在执行/etc/profile.d的目录下的脚本文件 运行$HOME/.bash_profile用户环境变量文件---在执行$HOME/.bashrc 单引号:里面是什么就输出什么,六亲不认 双引号:会解析变量的 需要将命令的结果作为变量内容: 在使用awk的时候,我们习惯先用echo 加符号输出变量在通过管道给awk,进而控制变量输出结果 定义变量的技巧: shell中的特殊变量: set 可以设置位置变量参数:set -- “I am” handsome boy shell进程中的特殊变量: bash shell内置变量的命令:echo eval exec export read shift 运算命令: expr用法:expr(evaluate(求值) expression(表达式)) 既可以运算整数,也可以用于字符串长度,匹配等处理 注意: 计算时,运算符和数字之间都需要空格 乘号要反斜线转义 eg:expr 9 + 1 i=`expr 9 + 1` i=`expr $i + 1`变量需要用反引号括起 判断一个变量值或字符串是否为整数 原理:利用expr计算时变量或字符串必须为整数的规则,把变量和一个整数(非零) 相加,判断命令返回是否为0,0——成功为整数 #!/bin/bash expr $1 + 1 &> /dev/null if [ $? -ne 0 ];then echo "char" else echo "int" fi 判断扩展名是否符合要求 注意运算的时候都要加空格 #!/bin/bash if expr "$1" : ".*.sh" &>/dev/null then echo "thie name is right" else echo "you must rename to $1.sh" fi 通过expr计算字符串的长度 #!/bin/bash for N in quan zhi qiang do if [ `expr length $N ` -le 4 ] then echo $N fi done bc 交互式计算,命令行计算 echo 9+9|bc echo `seq -s "+" 10`=`seq -s "+" 10|bc`(其中seq为生成数字序列 -s 分隔符) 1+2+3+4+5+6+7+8+9+10=55 awk 计算小数很准确 echo "9.9 9.8"|awk ‘{print (($1-3)*$2)}‘ 67.62 基于shell变量输入read命令 Shell脚本的条件测试: [ -f /data/sh ] && echo 1 || echo false 可以使用man test 来进行表达式的书写 文件测试描述符 -d 文件 directory 文件 存在且为目录为真 -f 文件 file 文件存在且为普通文件为真 -e 文件 exist 文件存在为真 -r 文件 read 文件存在且为可读为真 -s 文件 size 文件存在且文件大小不为0为真 -w 文件 write 文件存在且可写为真 -x 文件 executable 文件存在且可执行为真 -L 文件 link 文件存在且为连接文件为真 f1 -nt f2 newer than 文件1比文件2 新。以文件修改时间为准 f1 -ot f2 older than 文件1比文件2 旧 。修改时间为准 注意:测试变量的时候最好加上双引号 [ -d "$QUAN" ] && echo "yes" || echo "no" 也可以用测试描述符代替if [ 条件1 ] && { 命令1 命令2 命令3 } if [ 条件1 ] then 命令1 命令2 命令3 fi 字符串测试操作符 -n "str" 字符串长度不为0为真 no zero -z “str” 字符串长度为0 则为真 “str1” = “str2” 两个字符串相等为真 ==代替= “str1” != “str2” 两个字符串不等为真 注意:字符串一定要用“”括起来 = != 两边要有空格 [ -n "" ] && echo "sb" || echo "bs" bs 整数二元比较操作符 [] 和test中 (()) 和[[]]中 -eq ==或= 相等,equal -ne != 不相等,no equal -gt > 大于,greater than -ge >= 大于等于 greater equal -lt < 小于 less than -le <= 小于等于 less equal 注意:两端还是要空格 [ $A -eq $B ] && echo "A=B" || echo "A!=B" 逻辑操作符: [] 和 test中 [[]] 和 (()) -a &&(可用在表达式外部) -o ||(可用在表达式外部) -! ! 企业案例: 如果传入数字等于1,就打印one 如果等于2,就打印two,其他提示输入不对并退出 #!/bin/bash read -p "please input a number: " innum [[ "$A" =~ [1-3] ]] && echo 8 判断A是否为1或2或3,用到通配符,使用[[]] 8 if条件语句 if 条件测试表达式 then 指令集1 elif 条件测试表达式 theb 指令集2 else 指令集3 fi 多分支elif的写法,每个elif后面都要then,最后一个else没有then Shell函数 执行带参函数: 函数名 参数1 参数2 注意:shell的位置参数也可以当成函数的参数 此时父脚本的参数临时被函数参数掩盖或隐藏 $0依旧是父脚本的名称 函数的参数变量是在函数体里面定义个的 注意:实现函数和执行脚本文件分离 可以通过source或者.加载脚本functions中的命令或者参数 里面有一个函数叫action 用法如下: action “字符串” /bin/true或者/bin/false 显示如下:字符串 [ OK ] case条件语句: while循环 shell中的休息命令:sleep 1 休息一秒 usleep 1000000 休息一秒 注意: 在进行死循环的时候最好要加上sleep命令进行控制循环的频率,否者会消耗大量 系统资源 shell脚本后台运行知识 使用&后台运行脚本 sh 111.sh & crl+c 停止执行当前脚本或任务 ctl+z 暂停执行当前的脚本或任务 防止执行脚本中断的方法: sh 111.sh & nohup 111.sh & screen保持回话,在执行脚本 ,一般要先安装在使用这个命令 screen -x 加入已存在的screen回话 -ls 显示所有的screen作业 -S 指定screen作业名称创建 定义菜单类型的范范: cat <<END =================== =================== END while按行读取文件的方法: 总结:while主要是执行守护进程,适用于频率小于1分钟循环处理,加sleep 和usleep控制频率 for循环——主要用于执行有限次的循环 for 变量名 in 变量取值列表(可以空格隔开) 打印乘法口诀的结果 生成随机数的犯法; cat /proc/sys/kernel/random/uuid 5)expect附带的mkpasswd生成 mkpasswd命令依赖于expect 必须安装 mkpasswd -l 9 -d 2 -c 3 -C 3 -s 1 -l 指定密码长度 默认为9 length -d 指定密码中的数字数量 默认为2 digits -c 指定密码中小写字母的数量 默认为2 lowercase chars -C 指定密码中大写字母的数量 默认为2 upper chars -s 指定密码中的特殊字符数量 默认为1 special chars 以上都必须有 Select 循环介绍 Shell脚本后台运行 shell 数组 打印数组元素:echo ${array[i]} i是从零开始的 echo ${array[*]} 整个数组的内容 echo ${#array[*]} 数组元素的个数 数组的删除:unset 数组[下标] 不加下标,默认是清除整个数组所有的数据 数组的截取和替换: 截取:echo ${array[*]:1:3} 从下标为1的元素开始截取,共截取3个数组元素 数组的替换: echo ${arary[*]/1/b} 将数组中的1 替换成为b ${数组名[*或@]/查找字符/替换字符} 注意:该操作不会改变原先数组的内容,于sed修改 脚本开发的规范:、 5) 脚本应该放在固定的路劲下 脚本调试的方法: 1)使用echo命令调试:一般在可能出错的地方,特别是变量附近 加入echo 输出 变量 并退出exit 不在执行以下的命令 2)使用bash命令参数调试 sh [-nvx] file.sh -n 不会执行该脚本,仅查询脚本语法是否有问题,并给出错误 -v 先将脚本输出,在执行脚本,有错误则暑促错误 -x 将执行脚本内容及即时输出显示到屏幕上,最有用的参数 注意:程序段会前面会显示+ 表示为程序代码 由PS4决定 PS4=‘+${LINENo}‘ 显示行号 3)用set 命令调试部分脚本 set -n set -v set -x 开启调试功能 set +x 关闭调试功能 直接将set -x set +x 加入脚本中需要调试的位置,运行脚本就无需 sh -x 了 shell脚本开发环境的配置和优化实践 linux中的信号以及trap命令 信号列表:kill -l 或者 trap -l 命令 可列出各种信号 通常需要忽略的信号包括: HUP INT QUIT TSTP TERM,脚本中可以使用数字也可以使用信号名字 trap命令用于指定,接受到信号后将要采取的行动 常见用途是在脚本程序被中断时完成的清理工作,或者屏蔽用户非法使用某些信号, 注意:在使用信号名时,需要省略SIG前缀 trap cmd signal cmd:是接受到信号应该采取的行动,命令可以用;隔开 signal 接收到到的信号 eg:trap ’echo quan ‘ 2 注意:一定是单引号 用stty -a 可以列出中断信号与键盘对应的信息 trap ‘’ 2 屏蔽信号 单引号里面不用填东西 trap ‘:’ 2 恢复信号,单引号里面加冒号 EXPECT 自动化交互式程序是一个自动交互式软件,基于TCL(Tool Command Language)脚本编程 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |