shell编程

简介:

   说到shell编程之前,先介绍变量,变量在shell编程中是很重要。变量无非就是一堆可变化的值。

   变量的的声明遵循以下几条规则:

   一,不能跟系统中的变量名重名。如PATH是系统变量,在声明时不要也用PATH当作变量名。

   二,不能以数字开关,12USER=bingo这是错误的,最前面不是数字的话,就认为合法,当然变量名只有二种情况,要么全部是英文,要么是英文跟数字组合。等号的两边不能有空格,USERNAME= bingo这种情况声明的USERNAME是空值,且会把bingo当作命令来执行 ,USERNAME = bingo 这种情况会USERNAME当作命令来执行 ,USERNAME =bingo这种情况会USERNAME当作命令来执行。

   三,变量内容没有限制,如果变量内容里还有变量,则必须用双引号,不能会出现变量无法替换,如果变量内容有特殊字符则需用\这个跳脱字符将它原来的意义给注释掉,使它变成一个普通的字符来使用。

   四,取消变量用unset,如unset USERNAME.

对变量做基本的介绍下面介绍三种条件测试

(1) test expresstion :用于检查文件与比较有效值 

(2) [ expreesstion ](判断符号):与test作用一样,在脚本中这种写法很常见

(3) ` expresstion `:一般判断常数之间的大小

(4)命令执行有两种状态:一种叫做命令执行的结果,一种是命令执行结果的状态返回值,

(5)命令的引用两种方式``与$(): echo “kernel-`uname -r`" 与echo "kernel-$(uname -r)”。(``反单号,在esc键的下面)效果都一样

(6)算术运算:sum=$(($var1+$var2))与sum=$[$var1+$var2]效果一样

(7)位置参数:执行脚本为$0这个变量,第一个接的参数是$1,第二个是$2,依次累推

下面介绍if的用法。if 用于条件判断。

1,  if 条件测试 ;then

     语句...

    fi (表示结束if语句)

  (1) if test 2 -lt 3;then

         echo "this is right."

  fi

  (2)if [ 2 -lt 3 ];then (注意要与[  ]之间有空格

        echo "this is right"

   fi

(3)  if [[ 2<3 ]];then

        echo “this is right”

    fi

2,if 条件测试;then(如果条件测试返回的值为真,则执行语句一,否则执行语句二)

      语句一....

    else

      语句二....

    fi

(1)if  [ 4 -lt 3 ];then 

      echo "this is right."

else  

       echo "this is wrong."

fi

(2) if id root &> /dev/null;then(if后面可以写命令,&> /dev/null把id命令执行的执行结果输入到/dev/null,可把/dev/null当作黑洞,永远都填不满)

          echo "user exist."

     else

          echo "user not exist."

fi

3,  if 条件测试1;then

       语句一...

    elif 条件测试2;then (elif可以有多个)

       语句二...

    else

        语句三...

    fi

   read -p “please input (y/n):." yn(提示用户输入y/n,并将值存储在变量yn中)

     if  [ "$yn" = "y" -o "$yn" == "Y" ];then

        echo "ok,continue"

    elif [ "$yn"= "n"  -o "$yn"="N" ];then

        echo "break."

     else

          echo "input error."

   fi

 

4, case常用于变量的值有多种的时候

case  变量名 in 

 "第一个变量内容")

      语句1....

"第二变量内容”)

     语句2....

*)  (*表示既不是第一个变量内容也不是第二变量内容)

      语句3.....

esac

case "$1" in($1是位置参数,

start)

       service network start;; 

stop)

      service network stop;;

reload)

      sevice network reload;;

restart)

      service network restart;;

*)

echo "Usage: `basename $0` {start|stop|reload|restart}";;

esac

5,for循环,一般用于知道要循环几次。

for 变量名  in  变量值 ;do

   语句1....

done

 

sum=0

for i in `seq 1 100`;do(seq 是表示从1到100都循环一次,加``表示先执行seq,得到seq命执行结果)

     sum=$(($i+$sum))

     let  i++ (让变量自动加1)

done

echo "total $sum."

6,while 循环用于变量值不固定的时

while 条件判断;do(条件满足时就循环)

   语句...

done

 计算从1到100偶数之和

sum=0

i=0

while [ $i -le 100 ];do

      sum=$(($sum+$i))

      let i+=2

done

echo "total $sum"

 

7,until 循环正好与while相反,当条件不满足时循环

until 条件判断 do;

    语句

done

sum=0

i=0

until [ $i -ge 100 ];do

     sum=$(($sum+$i)

     let i++

done

echo "total $sum"

8,function(函数):简单来说实现代码重复调用。遵循先定义后调用

定义函数两种方式

(1)function fname {

语句.....

}(function 是关键字,fname是函数名

(2) fname () {

语句...

FUSER () {

    if id $1 &> /dev/null;then

         echo "user uid: `id -u $1`,user shell:`grep "^$1\>:" /etc/passwd`

    esle

         echo "no this user."

   fi

}(定义了一个FUSER是函数名,大小写都无所谓)

read -p "input user:" USERNAME

while [ "$USERNAME" != "quit" ];do

      FUSER $USERNAME(给函数传递参数也就是$1)

      read -p "next user:" USERNAME

 done

9, continue:退出当前这一次循环,提前进入下一次循环

  i=0

  sum=0

while [ $i -le 100 ];do

      if [ $[$%2] -eq 1 ];then

      let i++

     continue (如果i是奇数,则又从while开始循环)

      fi

      let sum=$(($sum+$i))

      let i++

done

echo "even total: $sum"

10, break: 中断当前循环

read -p "input username:" UNAME

while true;do(true表示不用做判断,开始循环)

    if id $UNAME &> /dev/null;then

          echo “user uid: `id -u $UNAME &> /dev/null`

     else

           echo "no a user: $UNAME."

     fi

     read -p "n|N for next user,others for quitting."choice

           case $choice in 

             n|N)

                read -p "a username:" UNAME;;

             *)

                 break ;;(中止循环,并退出)

            esac

    done









本文转自 deng304749970 51CTO博客,原文链接:http://blog.51cto.com/damondeng/900301,如需转载请自行联系原作者
目录
相关文章
|
12月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
175 6
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
12月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
10月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
11月前
|
Shell Linux 开发工具
|
11月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
212 12
|
11月前
|
Shell
Shell编程(下)
Shell编程(下)
182 1
|
11月前
|
Shell Linux Windows
Shell编程(上)
Shell编程(上)
116 1
|
12月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
存储 Unix Shell
shell脚本编程基础
【9月更文挑战第4天】
136 12
|
Shell Linux
Shell 编程 编写hello word
Shell 编写hello word
125 5