本文共 4743 字,大约阅读时间需要 15 分钟。
1.for循环:
1 2 3 4 5 | #!/ in/bash for i 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 i in ` find /var/log -name "*.log" ` do tar -czvf $. tar .gz $i done |
4.批量解压
1 2 3 4 5 | #!/bin/bash for i 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 i 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 i 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 i 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 |
Shell编程语言是非类型的解释型语言,不像C++/JAVA语言编程时需要事先声明变量,SHELL给一个变量赋值,实际上就是定义了变量,在Linux支持的所有shell中,都可以用赋值符号(=)为变量赋值。
SHELL变量可分为两类:局部变量和环境变量。局部变量只在创建它们的shell脚本中使用。而环境变量则可以在创建它们的shell及其派生出来的任意子进程中使用。有些变量是用户创建的,其他的则是专用shell变量。
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空字符串
常用语句案例:
打印多个数
[root@localhost sh]# cat for.sh
#!/bin/bashfor i in `seq 15`
do
echo "num is $i"done
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 9while逐行读取某个文件: 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.txtcase选择语句:
[root@localhost sh]# sh case.sh
Usage : {case.sh ifconfig|free|uname|quit} [root@localhost sh]# cat case.sh #!/bin/bash case $1 inifconfig)
ifconfig ;; free) free -m ;; uname ) uname -a ;; quit) exit ;; *) echo -e "\033[32mUsage : {$0 ifconfig|free|uname|quit}\033[0m" ;; esacselect选择语句:
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/bashPS3="please select you meau:"
select i in ifconfig free w history
do
echo "your select is $i" exit donecase,select语句在一起使用:
#!/bin/bash
echo -e "please input this number:"
PS3="please select your use meau:" select i in ifconfig free uname quit docase $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以下是各个脚本案列:
自动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/