设为首页 收藏本站
查看: 914|回复: 0

Linux中的shell编程

[复制链接]

尚未签到

发表于 2015-10-25 14:42:53 | 显示全部楼层 |阅读模式
  shell变量
        1:两类变量:临时变量和永久变量
             临时变量是shell程序内部定义的,适用范围仅限于程序内部,对其他程序不可见。包括:用户自定义变量,位置变量。永久变量是环境变量,其值不随shell脚本的执行结束而消失。
        2:用户自定义变量要以字母或下划线开头,由字母,数字,下划线组成。在使用变量时,要在变量前面加"$"符号。
        3:位置变量和特殊变量
  shell解释执行用户命令时,将执行命令的第一个部分作为命令名,其他部分作为参数。由出现在命令行上的位置确定的参数称为位置参数。
            例如:
                    ls  -l  file1 file2  file3
                  $0这个程序的文件名 ls -l
                  $n 这程序的第n个参数值,n=1-9
         4:特殊变量
                 $*  这个程序的所有的参数
                 $#   这个程序的参数的个数
                 $$ 这个程序的PID
                 $!  执行上一个后台命令的PID
                  $?  执行上一个命令的返回值
         5:shell命令
              read命令:从键盘读入数据,付给变量。
             如:read  NAME
              expr命令:对整数型变量进行算数运算
             如:expr  3 + 5  之间要有空格否则以字符的形式表示出来
                    expr  $var1 / $var2   同上
                    expr  $var1 \* 10  乘法要用到转义字符"\"
              复杂的运算:expr  `expr 5 + 7` + 3   可以用命令替换符
         6:变量测试语句:
            test      测试条件
             1>字符串测试:
                        test  str1=str2   测试字符串是否相等
                        test  str1 != str2 测试字符串是否不相等
                        test   str1           测试字符串str1是否不为空
                        test    -n  str1      测试字符串是否不为空
                        test    -z   str1     测试字符串是否为空
              2>整数测试:
                        test   int1   -eq   int2  测试整数是否相等
                        test   int1   -ge    int2  测试int1是否>=int2
                        test   int1   -gt     int2   测试int1是否> int2
                        test   int1   -le     int2    测试int1是否 <= int2
                        test   int1   -lt     int2    测试int1是否< int2
                        test   int1    -ne   int2   测试int1和int2是否不相等
               3>文件测试:
                        test  -d  file  指定的问件是否为目录
                        test   -f file    指定的文件是否为常规的文件
                        test   -x file   指定的文件是否可执行
                        test   -r  file   指定的文件是否可读
                        test   -w  file   指定的文件是否可写
                        test   -a  file   指定的文件是否存在
                        test   -s  file    指定的文件大小是否非0
  变量测试语句一般不单独使用,一般作为if语句的测试条件。
  例如:
            if      test   -d   $1  then
            fi
  变量测试语句可用[] 进行简化,如
  test -d $1  等价于  [ -d $1 ] (注意括号两边的空&#26684;)
  
       7:流程控制语句
              多个条件的联合:
            -a   逻辑与,当且仅当两个条件都成立时,结果为真
           -o    逻辑或,两个条件只要有一个条件成立,结果为真。
         例如: elif [ -c $file_name -o -b $file_name ]   
                       then                                                     (注意测试语句内的空&#26684;)
        
          一个实际的例子:
                     #/bin/sh
                     if  [ $#  -ne 2 ]; then
                            echo  &quot;Not enough parameters&quot;
                            exit 0    #  0表示程序正常的退出
                     fi
                     if  [ $1 -eq $2 ]; then
                            echo &quot;$1 equals $2&quot;            #注意双引号和单引号的区别
                     elif  [ $1 -lt  $2 ]; then
                             echo  &quot;$1 littler than $2&quot;
                     elif  [ $1 -gt  $2 ]; then
                              echo &quot;$1 greater than $2&quot;
                      fi
          for ....done语句
                   例子:(剔除某一个在线的用户)
                   #!/bin/sh
                  #the script to kill logined user
                      username=&quot;$1&quot;
                      /bin/ps  aux |  /bin/grep $username | /bin/awk '{ print $2 }'  > /tmp/tmp.pid
                      killid = `cat /tmp/tmp.pid`
                      for PID in $killid
                      do
                              /bin/kill  -9  $PID 2> /dev/null
                      done
            select 和case的用法实例:
                    #!/bin/sh
                       echo &quot;a is 5, b is 3. Please select your method:&quot;
                        a=5
                        b=3
                       select var in &quot;a&#43;b&quot;  &quot;a-b&quot;  &quot;a*b&quot;  &quot;a/b&quot;
                       do
                               break
                       done
                       case $var in
                                 &quot;a&#43;b&quot;)  echo 'a&#43;b=' `expr $a &quot;&#43;&quot; $b` ;;
                                 &quot;a-b&quot; )  echo 'a-b=' `expr $a &quot;-&quot; $b` ;;
                                 &quot;a*b&quot; )  echo 'a*b=' `expr $a &quot;*&quot; $b` ;;
                                 &quot;a/b&quot;  )  echo 'a/b='  `expr $a &quot;\&quot; $b` ;;
                                   *  )  echo &quot;input error&quot;
                         esac         
           
                 while 循环:
                         #!/bin/sh
                            num=1
                           while [ $num -le 10 ]
                                   do
                                        SUM= `expr $num \* $num`
                                        echo $SUM
                                         num= `expr $num &#43;1 `
                                     done
  不通过交互式的方法而是通过标准输入来设置用户的密码: echo &quot;密码&quot; |  passwd  --stdin  用户名
  
         版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-130674-1-1.html 上篇帖子: shell程序设计(一) 下篇帖子: Shell 编程实验
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表