博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell脚本(一)
阅读量:6394 次
发布时间:2019-06-23

本文共 4743 字,大约阅读时间需要 15 分钟。

1.for循环:

1
2
3
4
5
#!/ in/bash
for 
in 
`
seq 
1 15`
do
echo 
-e 
"\033[32m This num is $i\033[0m"
done
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
root@localhost
 
scripts]
# ./1.sh 
 
This num is 1
 
This num is 2
 
This num is 3
 
This num is 4
 
This num is 5
 
This num is 6
 
This num is 7
 
This num is 8
 
This num is 9
 
This num is 10
 
This num is 11
 
This num is 12
 
This num is 13
 
This num is 14
 
This num is 15
1
2
3
4
5
6
7
8
9
2.求和1-100的值
#!/bin/bash#auto sum 1 100
j=0
for 
((i=1;i<=100;i++))
do
j=`
expr 
$i + $j`
done
echo 
$j
root@localhost scripts]
# /bin/bash 2.sh 5050

3.找到相关log,然后批量打包

1
2
3
4
5
#!/bin/bash
for 
in 
`
find 
/var/log 
-name 
"*.log"
`
do
tar 
-czvf $.
tar
.gz $i
done

4.批量解压

1
2
3
4
5
#!/bin/bash
for 
in 
`
find 
/var/log 
-name  
"*.tar.gz"
`
do
tar 
-xzvf  $i -C 
/tmp/test02/
done

5.远程主机批量传输文件

(1)做远程免密钥登录

1
2
3
4
5
root@192_168_77_133 .
ssh
]
# ssh-keygen 
[root@192_168_77_133 .
ssh
]
# lsauthorized_keys  id_rsa  id_rsa.pub  known_hosts[root@192_168_77_133 .ssh]# pwd/root/.ssh
root@192_168_77_133 .
ssh
]
# scp id_rsa.pub root@192.168.77.166:/root/.ssh/
mv 
id_rsa.pub authorized_keys
然后从133ssh连接166就不需要密码直接输入root@192_168_77_133 .
ssh
]
# ssh 192.168.77.166连接了

root@192_168_77_133 ~]#ssh -l 192.168.77.166 ‘df -h’远程执行命令

一般情况是执行copy命令:root@192_168_77_133 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.77.166

1
2
3
4
5
#!/bin/bash
for 
in 
`
echo 
192.168.77.166`
do
scp 
/data/lixi
.txt  $i:
/tmp/
doneroot@192_168_77_133 mnt]
# sh 1.sh lixi.txt                                 100%    0     0.0KB/s   00:00   ~
1
2
3
4
5
6
7
8
#!/bin/bashfiles=$*#如果$*为空的时候if [ -z $* ]; then
echo 
-e 
"\033[32mUsage:{$0 /boot|/tmp|/data/lixi}\033[0m"
exit
fi
for 
in 
`
echo 
192.168.77.166`
do
scp 
$files  $i:
/tmp/
done

6.while循环 

     

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bashi=0
while 
[[ $i -lt 10 ]]
do
echo 
"The number is $i"         
((i++))
done
[root@192_168_77_133 mnt]
# sh 2.sh 
The number is 0
The number is 1
The number is 2
The number is 3
The number is 4
The number is 5
The number is 6
The number is 7
The number is 8
The number is 9

   read命令

1
2
3
4
5
#!/bin/bash
while 
read 
line
do
echo 
$line
done 
<
/etc/passwd

批量同步数据

1
2
3
4
5
6
7
8
9
!
/bin/bash
while 
read 
line
do
scp 
-r 
/data/lixi 
root@$line:
/tmp
done 
<list.txt
root@192_168_77_133 mnt]
# cat list.txt
 
192.168.77.166
 
192.168.77.167
 
192.168.77.168~                                                                          ~

for循环也可以有上面的效果

1
2
3
4
5
#!/bin/bash
for 
in 
`
cat 
list.txt`
do
scp 
-r 
/data/lixi 
root@$i:
/tmp
done

切割循环读取文件里面的内容

1
2
3
4
5
6
7
8
9
10
root@192_168_77_133 mnt]
# cat ip.txt  
1 192.168.77.166 
/data  
/tmp
2 192.168.77.167 
/data  
/tmp
3 192.168.77.168 
/data  
/tmp
~                                                                            
#!/bin/bash
while 
read 
line
do
ipp=`
echo 
$line | 
awk 
'{print $2}'
`
scp 
-r 
/data/lixi 
root@$ipp:
/tmp
done 
<ip.txt
  1. Shell编程语言是非类型的解释型语言,不像C++/JAVA语言编程时需要事先声明变量,SHELL给一个变量赋值,实际上就是定义了变量,在Linux支持的所有shell中,都可以用赋值符号(=)为变量赋值。

    SHELL变量可分为两类:局部变量和环境变量。局部变量只在创建它们的shell脚本中使用。而环境变量则可以在创建它们的shell及其派生出来的任意子进程中使用。有些变量是用户创建的,其他的则是专用shell变量。

  2. SHELL常见的系统变量解析:

$0 当前程序的名称

$n 当前程序的第n个参数,n=1,2,…9

$* 当前程序的所有参数(不包括程序本身)

$# 当前程序的参数个数(不包括程序本身)

$? 命令或程序执行完后的状态,一般返回0表示执行成功。

$UID 当前用户的ID

$PWD 当前所在的目录

逻辑运算符解析:

-f判断文件是否存在 eg: if [ -f filename ]

-d判断目录是否存在 eg: if [ -d dir     ]

-eq    等于应用于:整型比较

-ne    不等于应用于:整型比较

-lt    小于应用于:整型比较

-gt    大于应用于:整型比较

-le    小于或等于应用于:整型比较

-ge    大于或等于应用于:整型比较

-a双方都成立(and)逻辑表达式–a 逻辑表达式

-o单方成立(or)逻辑表达式–o 逻辑表达式

-z空字符串

  1. 常用语句案例:

    打印多个数

    [root@localhost sh]# cat for.sh 

    #!/bin/bash

            for i in `seq 15`

            do 

            echo "num is $i"

            done

  2. while条件判断数字:[root@localhost sh]# cat while.sh 

    #!/bin/bash
    i=1
    while [ $i -lt 10 ];
            do
            echo $i
            ((i++))
            done
    [root@localhost sh]# sh while.sh 
    1
    2
    3
    4
    5
    6
    7
    8
    9

  3. while逐行读取某个文件: sh]# sh whiles.sh 

    192.168.2.11
    192.168.2.12
    192.168.2.13
    192.168.2.14
    192.168.2.15
    192.168.2.16
    [root@localhost sh]# cat whiles.sh 
    #!/bin/bash
    while read line ;
            do
            echo $line
            done <ip.txt

  4. case选择语句: 

    [root@localhost sh]# sh case.sh 

    Usage : {case.sh ifconfig|free|uname|quit}
    [root@localhost sh]# cat case.sh 
    #!/bin/bash
    case $1 in

            ifconfig)

            ifconfig
            ;;
            free)
            free -m
            ;;
            uname )
            uname -a 
            ;;
            quit)
            exit
            ;;
            *)
    echo  -e  "\033[32mUsage : {$0 ifconfig|free|uname|quit}\033[0m"
            ;;
            esac

  5. select选择语句:

     sh]# sh select.sh 

    1) ifconfig
    2) free
    3) w
    4) history
    please select you meau:1
    your select is ifconfig
    [root@localhost sh]# cat select.sh 
    #!/bin/bash

    PS3="please select you meau:"

    select i in ifconfig free w history

            do 

    echo "your select is $i"
            exit
            done

  6. case,select语句在一起使用:

    #!/bin/bash

    echo -e "please input this number:"

    PS3="please select your use meau:"
    select i in ifconfig free uname quit
            do

            case $i in

            ifconfig)
            ifconfig
            ;;
            free)
            free -m
            ;;
            uname )
            uname -a
            ;;
            quit)
            exit
            ;;
            *)
    echo  -e  "\033[32mUsage : {$0 ifconfig|free|uname|quit}\033[0m"
            ;;
            esac
    done

  7. 以下是各个脚本案列:

    自动copy删除

     

    !/bin/bash

    FILE=/data/test1
    DIR=/opt/sh/

    cp $FILE $DIR -a

    rm -rf $FILE

    echo "this is success..."

~      后序持续更新。。。。。。。。                            

                      

                

           本文转自 Anonymous123 51CTO博客,原文链接:http://blog.51cto.com/woshitieren/1668896

转载地址:http://bxlha.baihongyu.com/

你可能感兴趣的文章
(转载):ASCII,Unicode和UTF-8 编码
查看>>
iOS 崩溃分析
查看>>
解决JBoss只能通过localhost(127.0.0.1)而不能通过IP访问
查看>>
MS SQL处理双引号(DoubleQuote)函数
查看>>
[智能架构系列]什么是Buddy智能开发框架
查看>>
三十一、关于android camera setParameters出错
查看>>
【收藏】QCIF、 CIF、2CIF、DCIF、D1(4CIF)格式介绍
查看>>
hdu 3836 Equivalent Sets (tarjan缩点)
查看>>
一些iOS高效开源类库(转)
查看>>
JAVA编程心得-JAVA实现CRC-CCITT(XMODEM)算法
查看>>
C# DES加密
查看>>
C# GDI+绘制一维条码打印模糊的解决办法
查看>>
STL系列 map
查看>>
UVA 825 Walking on the Safe Side(记忆化搜索)
查看>>
Java面试题之一
查看>>
HDOJ 3359 Kind of a Blur
查看>>
Mybatis 示例之 SelectKey
查看>>
jquery批量设置属性readonly和disabled
查看>>
20-ab压力测试及nginx性能统计模块
查看>>
几种常见模式识别算法整理和总结
查看>>