shell 脚本编程笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xh_xinhua/article/details/58597830

expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

#! /bin/sh
date
a=10;
b=20;
sum_val=`expr $a + $b`
echo "sum_val is a+b= $sum_val"
sum=`expr 2 + 2` #完整的表达式要被``包含
echo "sum is $sum"
echo "hello world!"

两点注意:
1、表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
2、完整的表达式要被 ’ ’ 包含,注意这个字符不是常用的单引号,在 Esc 键下边。

#! /bin/sh
a=10;
b=20;
sum=`expr $a \* $b` #乘号(*)前边必须加反斜杠(\)才能实现乘法运算;
echo "sum a*b = $sum"
if [ $a != $b ]
then
   echo "true"
else
    echo "false"
fi
#if...then...else...fi 是条件语句

case … esac 与其他语言中的 switch … case 语句类似

casein
模式1)
    command1
    command2
    command3
    ;;
模式2)
    command1
    command2
    command3
    ;;
*)
    command1
    command2
    command3
    ;;   # ;; 与其他语言中的 break 类似
esac
#! /bin/sh
echo "Input a number between 1 to 3"
read num
case $num in
1) echo "you input one"
;;
2) echo "you input two"
;;
3) echo "you input three"
;;
*) echo "you input other number"
;;
esac

for循环一般格式为:

for 变量 in 列表
do
    command1
    command2
    ...
    commandN
done

列表是一组值(数字、字符串等)组成的序列,每个值通过空格分隔。每循环一次,就将列表中的下一个值赋给变量。

#! /bin/sh
echo "it is a test!"
for loop in 1 2 3
do
    echo "the val is $loop"
done

##########################
# 运行结果:
# # ./ss.sh 
# it is a test!
# the val is 1
# the val is 2
# the val is 3
##########################

while循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件。其格式为:

while command
do
   Statement(s) to be executed if command is true
done
### 命令执行完毕,控制返回循环顶部,从头开始直至测试条件为假。###

如果COUNTER小于5,那么返回 true。COUNTER从0开始,每次循环处理时,COUNTER加1。运行上述脚本,返回数字1到5,然后终止。

#! /bin/sh
num=0
while [ $num -lt 5 ]  # -lt 表示左边小于右边 # #取的是num的值,要加 $ #
do
    num=`expr $num + 1`     #取的是num的值,要加 $
    cat /proc/msp/tuner     #获取5次tuner 信息
    echo "$num"             #取的是num的值,要加 $
    sleep 2
done
########################
#运行结果:
#   1
#   2
#   3
#   4
#   5
########################

until 循环执行一系列命令直至条件为 true 时停止。

#! /bin/sh
num=10
#until [ ! $num -lt 10 ] ## !(感叹号)与 $num有一个空格
until [ $num -lt 8 ] ## !(感叹号)与 $num有一个空格
do
    echo "num = $num"
    #num=`expr $num + 1`
    num=`expr $num - 1`
done
#######################
#   运行结果
#   num = 10
#   num = 9
#   num = 8
#######################

let 用于计算整数表达式的值

#! /bin/sh
#########  1  #########
num=10;
while [ $num -gt 5 ];
do
    echo "num = $num";
    let num=$num-1;   # num=$num-1 不用空格
done

#! /bin/sh
########  2  ########
num=10
while [ $num -gt 5 ]
do
    echo "num = $num"
    num=$(($num-1))
done
#######################
#   1和2的运行结果
#   num = 10
#   num = 9
#   num = 8
#   num = 7
#   num = 6
#######################

break命令允许跳出所有循环(终止执行后面的所有循环)
脚本进入死循环直至用户输入数字大于5。要跳出这个循环,返回到shell提示符下,就要使用break命令。

#! /bin/sh
while :
do 
    echo "Input a numbei between 1 to 5"
    read num
    case $num in
    1|2|3|4|5) echo "your number is $num"
    ;;
    *) echo "your number is not between 1 to 5"
    break;
    echo "your number is $num"
    ;;
    esac
done
###################################### 
#   运行结果:
#   Input a numbei between 1 to 5
#   6
#   your number is not between 1 to 5
#   # 
######################################
######################################
#   无break的运行结果:
#   Input a numbei between 1 to 5
#   6
#   your number is not between 1 to 5
#   your number is 6
#   Input a numbei between 1 to 5
######################################
### continue命令仅仅跳出当前循环,(第二句)echo "your number is $num"永远不会被执行###
#! /bin/sh
while :
do 
    echo "Input a numbei between 1 to 5"
    read num
    case $num in
    1|2|3|4|5) echo "your number is $num"
    ;;
    *) echo "your number is not between 1 to 5"
    continue;
    echo "your number is $num"
    ;;
    esac
done

######################################
#   运行结果:
#   Input a numbei between 1 to 5
#   6
#   your number is not between 1 to 5
#   Input a numbei between 1 to 5
######################################

Shell 也可以包含外部脚本,将外部脚本的内容合并到当前脚本

扫描二维码关注公众号,回复: 3881448 查看本文章
###### main.sh ########
#! /bin/sh
num=5
while [ $num -gt 1 ]
do
    num=$(($num-1))
    echo "num = $num"
    cat /proc/msp/tuner >> ./test.txt
done
. ./subscript.sh ##使用点号(.),但是注意点号(.)和文件名中间有一空格##

#########  subscript.sh #########
#! /bin/sh
echo "hello world!"

####################
#   运行结果:
#   num = 4
#   num = 3
#   num = 2
#   num = 1
#   hello world!
####################
##重定向输出到 /mnt/info.txt文件内##
filename=/mnt/info.txt
while [ 1 ]
do
    date >> $filename;
    cat /proc/meminfo >> $filename;
    sleep 2;
done

猜你喜欢

转载自blog.csdn.net/xh_xinhua/article/details/58597830