shell基本用法实战、循环、python脚本

1.  数字集合

for i in {1..20}

do 

 echo  $i

done

2.详细列出(字符且项数不多)

for i in 1 2 3 4 5

do 

  echo $i

done

3.对存在的文件进行循环

for filename in `ls *.sh`

do

echo $filename 

done

4.for循环--有点像C语法,但记得双括号

for((i=1;i<100;i++))

do

echo $i

done

5.seq形式 起始从1开始

for i in `seq 100`

do

echo $i

done

for i in $(seq 100)

do

echo $i

done

三. while

#!/bin/bash

# 显示一系列数字

count=1

while [ $count -le 6 ]; do
    echo $count
    count=$((count + 1))
done
echo "finished"

 

下面有一个使用while循环更加高级的一个例子:

#!/bin/bash

#
# 一个菜单驱动的展示系统信息的脚本
#

# 展示结果的延迟时间(单位/秒)
DELAY=3

while [[ "$REPLY" != "0" ]]; do
    clear
    cat <<EOF
----------------------------
请选择:
    1.显示系统信息
    2.显示磁盘使用情况
    3.显示用户空间使用情况
    0.退出
----------------------------
EOF
    read -p "请输入你的选择[0-3]:" REPLY
    if [[ $REPLY = [0-3] ]];then

        # 显示系统使用情况
        if [[ "$REPLY" = "1" ]];then
            echo
            echo "主机名:${HOSTNAME}"
            uptime
            sleep $DELAY
        fi

        # 显示磁盘使用情况
        if [[ "$REPLY" = "2" ]];then
            df -h
            sleep $DELAY
        fi

        # 显示用户空间使用情况
        if [[ "$REPLY" = "3" ]];then
            # 判定有效用户是否为root
            if [[ $(id -u) -eq 0 ]];then
                echo
                echo "(所有用户)用户空间使用情况:"
                du -sh /home/*
            else
                echo
                echo "(${USER})用户空间使用情况:"
                du -sh $HOME
            fi
            sleep $DELAY
        fi
    else
        echo "非法输入"
        sleep $DELAY
    fi
done
echo "脚本退出"

执行脚本:./read-menu.sh,输出:

----------------------------
请选择:
    1.显示系统信息
    2.显示磁盘使用情况
    3.显示用户空间使用情况
    0.退出
----------------------------
请输入你的选择[0-3]:1

主机名:localhost.localdomain
 17:28:28 up 333 days, 44 min, 10 users,  load average: 1.04, 1.06, 1.17

在上面的例子中,将菜单封装在while循环内,程序就可以在用户每次选择后重复展示菜单项。只要REPLY值不为0,重复循环,展示菜单项,给用户又一次的选择机会。而在每次动作结束时,系统执行sleep命令使程序暂停几秒,让用户看到选择执行的结果,随后清空屏幕显示并再次显示菜单。

用python 2.x实现上面个例子

vim p1.py   ;  python p1.py

# _*_coding:utf-8_*_
# coding=utf-8
 

import sys

# 导入系统命令包

import os

#导入正则表达式包

import re

#在控制台获取字符串

str2=raw_input("请输入字符串:")

if str2 .__eq__('abc'):

     print("你输入的字符串是:"+str2)

input =1

while(input !=0):

             print("--------------------------")

             print("请选择:")

             print("1.显示系统信息")

             print("2.显示磁盘使用情况")

             print("3.显示用户空间使用情况")

             print("0.退出")

             print("--------------------------") 

             #在控制台获取整型

             input = int(raw_input('请输入[0-3]:'))

             # 正则表达式匹配

             pattern = re.compile(r'[0-3]')

             # 将input 转为字符串才能匹配

             if pattern.match(str(input)):

                   if input == 1:

                       print("主机名:"+''.join(os.popen('echo ${HOSTNAME}').read()))

                       # 执行shell 的暂停命令

                        os.popen('sleep 3')

                   elif input == 2:

                       print("磁盘使用情况:"+''.join(os.popen('df -h').readlines()))

                       # 执行shell 的暂停命令

                        os.popen('sleep 3')

                  elif input == 3:

                       print("用户空间使用情况:"+''.join(os.popen('du -sh $HOME').read()))

                       # 执行shell 的暂停命令

                        os.popen('sleep 3')

                  else:

                         print("")

          else:

                 print("非法输入!")

                 os.popen('sleep 1')

print("脚本已退出")

# python 2.x和python3.x 在控制台获取参数还都可以用 : strx= input("请输入字符串:")  ,获取的值 默认是 字符串类型

# 字符串转整型: num=int(strx) ;  整型转字符串: strx = str(num)

if 表达式

   [ ]和[[ ]]的区别

区别一。在[中使用逻辑运算符,需要使用-a(and)或者-o(or)。在[[中使用逻辑运算符,需要使用&&或者||。

if [[  'abc' == "" || 'abc' == [a-z]* ]];then

echo "ok"

fi

if [[  'abc' == ""  -o 'abc' == [a-z]* ]];then

echo "ok"

fi

区别二。[是shell命令,在它包围的表达式是它的命令行参数,所以用>,<,=,!=比较整型数字和字符串大小需要转义,否则就变成io重定向了。[[是shell关键字,不会做命令行扩展,所以不需要进行转义。但是语法相对严格,如在[中可以用引号括起操作付,[[则不行。如if [ "-z" "ab" ]。

if [ 'abc' \> 'aad' ];then

echo true

fi

if [[ 'abc' > 'aad' ]];then

echo true

fi

区别三。[[可以做算术扩展,[则不行。

if [[ 11+1 -eq 100 ]]

echo "ok"

而if [ 11+1 -eq 100 ]则会报错。

区别四。$[]与$(())都支持整数四则运算,$[[]]没有这种用法

 echo $[ 2*3 +1 ] 不会报错

但是 echo $[[ 2*3 +1 ]] 会报错。

区别五。[[]]能用正则,而[]不行

if [[ $x =="" || $x == [a-Z]* ]];then

echo "没有输入数字或输入的数字不合法!"

exit 5

fi

` `与$() 都用作命令替换,$用作参数替换

$(date -d "today" +"%Y-%m-%d %H:%M:%S")

`date -d "today" +"%Y-%m-%d %H:%M:%S"`

x="abc"

echo $x

' ' 与" " ,单引号剥夺了所有字符的特殊含义,而双引号不会。

即x=5

echo '$x',会使$的特殊含义失效,输出:$x

而双引号会输出:5

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值