Network Security Internet Technology Development Database Servers Mobile Phone Android Software Apple Software Computer Software News IT Information

In addition to Weibo, there is also WeChat

Please pay attention

WeChat public account

Shulou

Proficient in shell programming for four days (2)

2025-01-28 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Servers >

Share

Shulou(Shulou.com)06/03 Report--

二 变量

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

Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.

Views: 0

*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.

Share To

Servers

Wechat

© 2024 shulou.com SLNews company. All rights reserved.

12
Report