当前位置: 首页 > news >正文

技术支持 优府网络太原网站建设企业手机网站开发

技术支持 优府网络太原网站建设,企业手机网站开发,郑州专业喷绘制作公司,网站优化关键词是怎么做的先来复习上节重定向的用法#xff1a; 1.快速清空文件 cat demo.txt /dev/null注#xff1a;linux中有一个经典名言【一切皆文件】#xff0c;/dev/null可以认为是一个特殊的空文件#xff0c;更形象点#xff0c;可以理解为科幻片中的黑洞#xff0c;任何信息重向定…先来复习上节重定向的用法 1.快速清空文件 cat demo.txt /dev/null注linux中有一个经典名言【一切皆文件】/dev/null可以认为是一个特殊的空文件更形象点可以理解为科幻片中的黑洞任何信息重向定输出到它后便有去无回当然黑洞里也没有信息能出来。 综合来讲上面的意思就是利用将黑洞做为demo.txt的标准输入黑洞里没任何内容任何文件里的内容被它吞噬了自然也没就没东西能剩下了所以最终就是demo.txt被黑洞洗空了。 /dev/null 还有其它用法比如用它可以让nohup不生成nohup.out文件见http://www.cnblogs.com/yjmyzz/p/4831182.html    2.执行时输出源码 #!/bin/bash -v printf %0.2f\n 12.12334执行结果如下 #!/bin/bash -v printf %0.2f\n 12.12334 12.12注意第3行输出结果之前把源码也打印出来了秘密在于第1行最后的 -v 参数    3.调试模式 #!/bin/bash -x printf %0.2f\n 12.12334 echo hello执行结果如下 printf %0.2f\n 12.12334 12.12echo hello hello注意第一行后面的参数变成了-x加上这个后执行时每一行代码在执行前会先输出对应的源码并且以开头十分方便调试。     4. if与test及[] 4.1 数字判断 #!/bin/bash -x i$1 #变量i的值取第1个参数的值 if test $i -gt 89; then #如果i89echo A elif test $i -gt 79; then #如果i79echo B elif test $i -eq 60 -o $i -gt 60;then #如果i60或i60即i60echo C elif test $i -gt 0;then #如果i0echo D elif test $i -lt 0;then #如果i0echo invalid else #i0的情况echo zero fi注if test 条件; then 语句 fi 这是基本格式注意条件后的;不可省略另外结束符号是fi即把if倒过来有点回文的理念另外要记住一堆缩写 -lt 即-Less Than的缩写,表示小于 -gt 即-Greater Than的缩写表示大于 -eq 即-equal的缩写表示等于此外还有 -ne 即-Not Equal的缩写表示不等于 -o 即-or表示前后二个逻辑判断是『或』的关系类似的 -a 即-and表示前后二个逻辑判断是『与』的关系 elif 即else if的缩写  上面的示例运行结果 ./demo.sh 90i90test 90 -gt 89echo A Atest语句还有一个简化的写法即把test 条件变成 [ 条件 ] 注意二端的方括号左右都要加一个空格所以上面的写法可以改成 i$1 if [ $i -gt 89 ]; thenecho A elif [ $i -gt 79 ]; thenecho B elif [ $i -eq 60 -o $i -gt 60 ]; thenecho C elif [ $i -gt 0 ]; thenecho D elif [ $i -lt 0 ]; thenecho invalid elseecho zero fi这样看起来就美观多了如果不喜欢-o这种逻辑或的写法第6行也可以换成这样 elif [ $i -eq 60 ] || [ $i -gt 60 ]; then但是执行的细节略有区别在调试模式下可以对比下用||写法的输入测试用例:61 ./demo2.sh 61i61[ 61 -gt 89 ][ 61 -gt 79 ][ 61 -eq 60 ][ 61 -gt 60 ]echo C C而用-o写法的输出 ./demo2.sh 61i61[ 61 -gt 89 ][ 61 -gt 79 ][ 61 -eq 60 -o 61 -gt 60 ]echo C C对比下5-6行可以发现区别在于判断一次还是判断二次  4.2 字符串判断 #!/bin/bash -x str1abc if [ -z $str1 ]; thenecho str1 is empty elseecho str1 is not empty fiprintf \nstr2 if [ -n $str2 ]; thenecho str2 is not empty elseecho str2 is empty fiprintf \nif [ $str1 $str2 ]; thenecho str1 str2 elseecho str1 str2 fi注 -n即-not empty判断字符串非空-z即-zero判断字符串为空判断字符串相同判断字符串时记得要加双引号 运行结果 str1abc[ -z abc ]echo str1 is not empty str1 is not emptyprintf \n str2[ -n ]echo str2 is empty str2 is emptyprintf \n [ abc ]echo str1 str2 str1 str24.3 文件及目录判断 #!/bin/bash -x if [ -f ~/.bash_profile ]; thenecho ~/.bash_profile is a file elseecho ~/.bash_profile is not a file fiprintf \nif [ -d ~/ ]; thenecho ~/ is a directory elseecho ~/ is not a directory fi-f即判断是否为file, -d即判断是否为directory, 输出结果 [ -f /Users/yjmyzz/.bash_profile ]echo ~/.bash_profile is a file ~/.bash_profile is a fileprintf \n [ -d /Users/yjmyzz/ ]echo ~/ is a directory ~/ is a directory5.命令列表 命令1 命令2 解释如果命令1返回成功则命令2会执行示例 #!/bin/bash ping -c 4 $1 printf \n %s connected \n $1将上面这段保存成testurl.sh然后chmod x testurl.sh执行效果如下 ./testurl.sh www.baidu.com PING www.a.shifen.com (115.239.211.112): 56 data bytes 64 bytes from 115.239.211.112: icmp_seq0 ttl50 time9.950 ms 64 bytes from 115.239.211.112: icmp_seq1 ttl50 time23.994 ms 64 bytes from 115.239.211.112: icmp_seq2 ttl50 time12.272 ms 64 bytes from 115.239.211.112: icmp_seq3 ttl50 time19.717 ms--- www.a.shifen.com ping statistics --- 4 packets transmitted, 4 packets received, 0.0% packet loss round-trip min/avg/max/stddev 9.950/16.483/23.994/5.641 ms www.baidu.com connected 如果把后面的参数 换成某个不能访问的网址比如在伟大的墙内可以试下 ./testurl.sh www.google.com PING www.google.com (216.58.197.100): 56 data bytes Request timeout for icmp_seq 0 Request timeout for icmp_seq 1 Request timeout for icmp_seq 2--- www.google.com ping statistics --- 4 packets transmitted, 0 packets received, 100.0% packet loss命令1 || 命令2 解释这个正好跟相反如果命令1返回失败则执行命令2 #!/bin/bash ping -c 4 $1 || printf \n %s connect fail \n $1把这个保存成testurl2.sh ,然后重复刚才的测试 ./testurl2.sh www.google.com PING www.google.com (216.58.199.4): 56 data bytes Request timeout for icmp_seq 0 Request timeout for icmp_seq 1 Request timeout for icmp_seq 2--- www.google.com ping statistics --- 4 packets transmitted, 0 packets received, 100.0% packet loss www.google.com connect fail 通过刚才的测试相信大家已经掌握与||的用法了那么问题来了如何判断前一个命令的执行结果是【成功】还是【失败】呢 先回忆一下大学里《C程序设计》里老师讲的内容C程序里main函数如果运行成功最后一般会约定返回return 0没错bash里就是这么判断的 再提一个问题为什么要跟C扯上关系因为linux里的很多bash命令就是拿C/C来开发的我们可以来验证下 #include stdio.h #include stdlib.h int main(int argc,char **argv){printf(hello world and this function will return 0\n);return 0; }这是一段c语言的代码保存成hello1.c然后输入gcc -o hello1 hello1.c mac本上只要安装了xcode就已经自带了gcc编译器然后会在当前目录下生成hello1的可执行文件做为对比再来一个hello2.c #include stdio.h #include stdlib.h int main(int argc,char **argv){printf(hello world and this function will return 1\n);return 1; }同样编译成hello2然后测试 ./hello1 echo hello1 is ok hello world and this function will return 0 hello1 is ok再来一个 ./hello2 echo you can not see this hello world and this function will return 1小结这跟很多语言里约定1代表true, 0代表false正好是反的在bash里如果一个命令执行后返回0表示成功返回1表示失败。     6. 检测参数个数及类型 最后结合前面学到的知识做一个小小的综合练习 #!/bin/bashecho param count: $# echo first param: $1 if [ $# -eq 1 ] (echo $1 | grep ^[0-9]*$ /dev/null); thenecho param check pass! elseecho only one integer parameter is accepted! fi上面这段代码的意思是仅接收1个整型的参数将这段代码保存成check1.sh然后试着运行下 ./check1.sh a b 2 param count: 3 first param: a only one integer parameter is accepted!再试下 ./check1.sh 123 param count: 1 first param: 123 param check pass!第5行的那个长长的if判断初次看估计比较晕我们来分解一下 第一部分 [ $# -eq 1]其中$#表示参数的个数-eq 1 要求参数个数必须等于1 第二部分 (echo $1 | grep ^[0-9]*$ /dev/null) 仍然有点复杂再细分一下先不管最后的/dev/null将其去掉然后简化一下 grep 用于字符查找及过滤见下面的图    who用于显示本机有哪些用户登录了以及登录的终端信息加上管道符|将输出结果传递给grep 001 最后就从who的一堆结果中过滤出包含001的信息了。 再回过头看下这个 echo 123 | grep ^[0-9]*$会输出123注如果mac上将终端改成了zsh直接运行会报错zsh: no matches found: ^[0-9]*$解决办法新建一个.sh脚本文件写在脚本文件里就能运行了grep后的部分是一个正则表达式匹配0-9中的1个或多个最后再来看 (echo $1 | grep ^[0-9]*$ /dev/null)现在应该能看懂了吧将1个参数输出然后做为grep的输入正常情况下如果第1个参数为数字则会输出但是我们的本意是放在if条件判断中并不希望将其输出所以最后重定向到黑洞。 结合前面的命令列表可以将这段if简化成终极版本 #!/bin/bash -x! ([ $# -eq 1 ] (echo $1 | grep ^[0-9]*$ /dev/null)) echo only one integer parameter is accecpted exit 1 echo param check pass!就不解释了大家自己体会吧。     转载于:https://www.cnblogs.com/yjmyzz/p/bash-shell-programming-study-2.html
http://www.sadfv.cn/news/32849/

相关文章:

  • 网站改进建议贵阳市做网站公司
  • 网站建设是什么职位seo分析报告
  • 网站如何做才容易被搜索到网业协同心得体会运营商
  • 备案 网站名字美工模板网站
  • 网站建设需要的服务器虚拟主机怎么发布网站
  • 建设公司网站都需要什么软件开发培训思摩特
  • 甘井子区城市建设管理局网站制作个人网站要多少钱
  • 北京中交建设工程咨询有限公司网站用服务器建立网站教程
  • 营销型网站建设细节精选网页设计
  • 如何做明星的个人网站网易企业邮箱手机端设置
  • 云奇网站建设海外网站的建设
  • 河北先进网站建设风格投标网站建设
  • 现在网站建设用什么软件wordpress 订单系统
  • 君隆网站建设网站做301怎么做
  • 创建销售网站多少钱瓜果类网站建设方案
  • 音乐网站制作php网站后台生成器
  • 石家庄做外贸网站建设服务器部署php网站
  • iis 发布网站内部服务器错误内江网站建设0832hdsj
  • 建站大师阙梅娇简介网网站建设公司
  • 做视频的软件模板下载网站集团门户网站建设不足
  • 自己的网站怎么做砍价婚介网站建站
  • 如何做php网站flash打开网站源码
  • 唐山做网站公司大连小程序哪个开发公司好
  • 无锡公司网站制作国内好的vps
  • 水利建设工程网站什么叫社交电商平台
  • 免费 个人 网站成都网站制
  • php 企业网站模板玉林市建设工程交易中心网站
  • 泉州四方网站开发开发公司名称起名大全
  • 百度sem代运营沈阳网站优化哪家好
  • 东莞做网站推广公司怎么制作个人作品网站