shell 编程基础(2)

来源:互联网 发布:手机域名的价值 编辑:程序博客网 时间:2024/06/06 07:05

shell编程(二)

 

二 变量

5 位置参数变量

 

$0  命令自己

$1   第一个参数

$2 第二参数

$9 第九个参数

例2:输出位置参数变量,脚本后要接参数

#!/bin/bash

 

echo "the  command  is  $0"

echo "canshu1  is  $1"

echo "canshu2 is $2"

 

6 预定义变量

 

$? 上一个命令的返回值。 0  上一个命令正确执行 非0  上一个命令不正确

 

$# 统计命令之后的参数个数

 

$* 返回所有参数

$n 位置参数变量

例3:输出预定义变量

#!/bin/bash

 

echo "canshu  zongshu  $#"

echo "canshu liebiao: $*"

echo  $?

 

7 键盘读取命令 

read  -p “提示信息” -t  等待时间   变量名

 

例子4:通过read读入变量值

#!/bin/bash

read -p "please input num1:" -t 30  test1

read -p "input num2:" -t 30  test2

sum=$(( $test1 + $test2))

echo “num1 +  num2 = $sum”

8 数值运算

变量值默认都是字符串型,要想进行数值运算。以下三种任选一种

 

1)declare方法

num1=123

num2=456

declare -i sum=$num1+$num2

 

2)sum=$(( $num1 + $num2 ))

 

3)sum=$(expr $num1 + $num2) 注意+左右必须空格

 

4)运算符

+   -  \*  /  %取余

三 shell中常用命令

 

1 行提取命令grep

选项: -v 反向选择

-n 提取时,显示行号

 

举例:

grep  "[^a-z]hen"  test.txt

oo前不是小写字母的行匹配。 注意:和开头没有关系

grep  “\.$” test.txt

匹配以.结尾的行

grep  "^[^A-Za-z]"  test.txt

匹配不以字母开头的行 注意:所有字母不能这样写   A-z

 

grep  “^$”  test.txt

匹配空白行

 

grep  "oo*" test.txt

匹配最少一个o

 

2 列提取命令

 

1) cut

 

cut  -d  “分隔符”  -f  提取列   文件名

 

more /etc/passwd | grep "/bin/bash" | cut -d ":" -f 1,3

提取passwd文件中可以登录的用户的用户名和UID


2) awk

 

awk  '条件 {动作}'

last | awk '{printf $1 "\t" $3 "\n"}'

提取last显示结果的第一和第三列

\t tab键

\n 换行

\r 回车

 

last | grep "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"|awk '{printf $1 "\t" $3 "\n"}'

在last中提取包含ip的行,在行中提取第一和第三列

 

 

awk内置变量 FS  指定分隔符

more /etc/passwd | awk 'BEGIN {FS=":"} {printf $1 "\t" $3 "\n"}'

读取passwd文件,以":"为分隔符,截取第一和第三列

BEGIN 在截取前使分隔符生效。如果没有BEGIN,那么第一行自定义的分隔符不生效

 

6 echo命令

echo  -e  “输出内容”

-e  识别格式化打印内容

 

echo  -e  “1\t2\t3” 打印tab键

 

echo  -e   "\e[1;31m  this is red text \e[0m" 输出红色字体

\e[  格式

1;31m  指定颜色

0m 恢复颜色(重置)

30m=黑色,31m=红色,32m=绿色,33m=黄色,34m=蓝色,35m=洋红,36m=青色,37=白色

 

echo  -e  “\e[1;42  background  \e[0m”

背景颜色:40=黑色,41=红色,42=绿色,43=黄色,44=蓝色,45=洋红,46=青色,47=白色

 

例子5:echo输出的小游戏

注: cat  -A  文件名 显示文件隐,包括藏字符

取消dos文档的回车符,两种办法

 

1) dos2unix  文档名

2) vi  -b  文档

:%s/^M//g ^M使用  ctrl+v+m  输入

 

例6:数据备份

#!/bin/bash

DAY=`date +%Y%m%d`

#定义日期变量

SIZE=`du -sh /var/lib/mysql`

#定义mysql目录大小的变量

echo "Date: $DAY" >> /tmp/dbinfo.txt

#把日期输入信息文档

echo "Data Size: $SIZE" >> /tmp/dbinfo.txt

#把大小输入信息文档

cd /opt/dbbak

#切换目录

tar zcvf mysqlbak-${DAY}.tar.gz /var/lib/mysql /tmp/dbinfo.txt

打包备份mysql目录,同时打包信息文档

rm -f /tmp/dbinfo.txt

 


0 0