以前的shell笔记

小知识

  1. shell脚本if中的表达式条件可通过man test查看,比如-a就相当于&&。
  2. 2.

实例一:模拟登陆

#!/bin/bash
echo -n "login:"
read name
echo -n "password:"
read passwd
if [ $name = "wilcohuang" -a $passwd = "31415926yhwy." ];
then echo "the host and password is right"
else echo "input is error!"
fi

实例二:比较两个数的大小

#!/bin/bash
echo "please enter two number"
read a
read b
if test $a -eq $b
then echo "no.1 = no.2"
elif test $a -gt $b
then echo "no.1 > no.2"
else echo "no.1 < no.2"
fi

实例三:搜索某个目录下文件是否存在

#!/bin/bash
echo "enter a file name:"
read a
if test -e /data/home/wilcohuang/shell/$a
then echo "the file is exist!"
else echo "the file is not exist!"
fi

实例四:for循环的使用

#!/bin/bash
clear
for num in 1 2 3 4 5 6 7 8 9 10
do
    echo $num
done

实例五:命令行输入

#!/bin/bash
echo "Please enter a user:"
read a
b=$(whoami)
if test $a = $b
then echo "the user is running"
else echo "the user is not running"
fi

实例六:删除当前目录下大小为0的文件

#!/bin/bash
for filename in `ls`
do
    if test -d $filename
    then continue
    else a=$(ls -l $filename | awk '{print $5}')
        if test $a -eq 0
        then rm -rf $filename
        fi
    fi
done

实例七:如果某目录下有文件,那么将其文件系统大小改为3G

#!/bin/bash
while line=`ls /data/home/wilcohuang/shell/test1`
do
    if test $line = ""
    then echo "NULL"
        sleep 1
    else echo $line
        chfs -a size=3G /data/home/wilcohuang/shell/test1
        exit 0
    fi
done

实例八:测试IP地址

#!/bin/bash
for i in {1..9}
do
    echo "the number of $i computer is"
    ping -c 1 192.168.0.$i
done

ping: -c count次数

实例九:从0.sh中读取内容并打印

#!/bin/bash
while read line
do
    echo $line
done < 0.sh

实例十:从0.sh中读取内容并+1

#!/bin/bash
test -e 0.sh
while read line
do
    a=$line+1
    echo $a
done < 0.sh

实例十一:普通无参数函数

#!/bin/bash
p()
{
    echo "hello"
}
p

实例十二:给函数传递参数

#!/bin/bash
p_num()
{
    num=$1
    echo $num
}
for n in $@
do
    p_num $n
done

命令:bash para.sh 10

实例十三:获取本机IP地址

ifconfig | grep 'inet addr:' | awk '{print $2}' | sed 's/addr://g'

`
[root@www ~]# sed [-nefr] [动作]
选项与参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。

动作说明: [n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』

function:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
`

实例十四:查找最大文件

#!/bin/bash
a=0
for name in *.*
do
    b=$(ls -l $name | awk '{print $5}')
    if test $b -ge $a
    then a=$b
        namemax=$name
    fi
done
echo "the max file is $namemax"

实例十五:查找本网段的所有ip

a=1
while :
do
    a=$(($a+1))
    if test $a -gt 255
    then break
    else
        echo $(ping -c 1 10.204.172.$a | grep "ttl" | awk '{print $4}' | sed 's/://g')
        ip=$(ping -c 1 10.204.172.$a | grep "ttl" | awk '{print $4}' | sed 's/://g')
        if [ -n "$ip" ];
        then
            echo $ip >> ip.txt
        fi
    fi
done

注意:shell中比较字符串必须加双引号,否则结果不正确,正确做法如:

a=""
if [ -n "$a" ];
then
    echo 'yes'
else
    echo 'no'
fi

实例十六:case练习

#!/bin/bash
clear
echo "enter a numbe from 1 to 5:"
read num
case $num in
    1)echo "you enter 1"
        ;;
    2)echo "you enter 2"
        ;;
    3)echo "you enter 3"
        ;;
    4)echo "you enter 4"
        ;;
    *)echo 'default'
        ;;
esac

实例二十:yes/no返回不同结构

#!/bin/bash
clear
echo "enter [y/n]:"
read a
case $a in
    y|Y|Yes|YES)echo "you enter $a"
    ;;
    n|N|NO|no)echo "you enter $a"
    ;;
    *)echo 'error'
    ;;
esac

实例二十二:使用内置命令

#!/bin/bash
clear
echo "hello,$USER"
echo "Today's date id `date`"

实例二十三:打印所有没有密码的用户

cat /etc/shadow | grep '!!' | awk -F ":" '{print $1}'

实例二十三:检查端口号是否启动

#!/bin/bash
n=1
echo "检查nginx服务..."
while true
do
    if test $n -gt 20
    then
        echo "nginx服务启动失败"
        break
    fi

    sleep 5
    n=$(($n+1))
    port=`netstat -natp | grep "0.0.0.0:80"`
    if [ ${#port} -gt 3 ];
    then
        echo "nginx服务已经启动"
        break
    fi
done
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值