四天精通shell编程(二)-创新互联

二变量

创新互联是专业的临川网站建设公司,临川接单;提供做网站、网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行临川网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

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

#名字为:canshu.sh

echo"canshu zongshu $#"

echo"canshu liebiao: $*"

echo $?

附:

对其赋予执行权限:chmod755 canshu.sh

执行:./canshu.sh2 2 3 4 5 6

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)注意+左右必须空格,不然会发生错误如:打印:123+456#字符串叠加

4)运算符

+ - \* / %取余

附:

shell编程的目的是为了减轻系统管理员的任务

shell脚本可能写不出漂亮的界面,但是他不是用来干这个的→ 各种编程语言都有他特殊的应用面,比如说C语言就比VB在数值计算方面更加精确,而VB则在界面方面比C更胜一筹

shutdown-r now #系统重启

三 shell中常用命令

1行提取命令grep

选项: -v反向选择

-n提取时,显示行号

举例:

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

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

附:也可以结合以前的内容:grep-n "[^a-z]hen" test_rule.txt

中括号代表一个字母,^代表取反,a-z代表小写字母a到z

grep “\.$” test.txt

匹配以.结尾的行

附:在正则表达式中$代表行尾;

\代表转义符,表示,将其后紧跟字符的特殊含义消失!

Linux中行尾的空格附,也可以作为一个字符,一定要记住!这是一些脚本发生错误的原因!

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

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

附:

^在中括号外面代表行首

grep"^[^a-zA-Z]" test_rule.txt #这样也可以

grep “^$” test.txt

匹配空白行

grep "oo*" test.txt

匹配最少一个o

附:o*代表着*前面的这个o可以重复0到无数多次

还可以这样用:grep"hh*o" test_rule.txt

这样:grep"ooo" test_rule.txt

2列提取命令

1) cut

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

如:cut-d ":" -f 1,3 /etc/passwd

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

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

附:这里1,3之后就不用加文件名了

last命令用于查看那个用户,在那个端口等信息下登录到系统,是一个日志命令

2) awk

awk '条件{动作}'

last| awk '{printf $1 "\t" $3 "\n"}' # $1代表第一列

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

\t tab键

\n换行

\r回车

附:也可以是:last| awk '{printf $1 "\t" $3 "\t" $4 "\n"}'

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指定颜色#30到39之间的数字

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文档名#unix2dos方向相反

2)vi -b文档

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

例6:数据备份

#!/bin/bash

DAY=`date+%Y%m%d` #反引号!!!

#定义日期变量

附:DAT=$(date+%F) #更方便且更漂亮,打印出:2013-12-21

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

#定义mysql目录大小的变量,``符号可以换成$()

附:sudodu -sh /etc/ #统计/etc/目录的大小

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

#把日期输入信息文档

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

#把大小输入信息文档

cd/opt/dbbak

#切换目录

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

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

附:在字母zc后加v会显示压缩过程

rm-f /tmp/dbinfo.txt

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章标题:四天精通shell编程(二)-创新互联
浏览路径:http://scyanting.com/article/cdhepo.html