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