脚本语言学习
Shell简介
教程
Linux 的 Shell 种类众多,常见的有:
Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)
由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。
1、使用文本编辑器(vi/vim命令创建文件),以.sh为文件的扩展名(php写的就.php)
#!/bin/bash
echo "Hello World !"
所用命令 | 含义 |
---|---|
#! | 用于告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell |
echo | 用于向窗口输出文本 |
2、运行Shell的两种方式
运行shell | 使用方式 |
---|---|
可执行脚本 | chmod +x ./test.sh #使脚本具有执行权限 AND ./test.sh #执行脚本 |
作为解释器参数 | /bin/sh test.sh OR /bin/php test.php |
变量
定义变量(包括第二次赋值)的时候不需要加美元符号,
使用一个定义过的变量,只要在变量名前面加美元符号即可,如:
your_name="qinjx"
echo $your_name
echo ${your_name} #加花括号是为了帮助解释器识别变量的边界
传参
可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
SHELL1-统计文件行数
wc命令:统计指定文件中的字节数、字数、行数,并将统计结果显示输出。
wc命令
-c # 统计字节数,或--bytes或——chars:只显示Bytes数;。
-l # 统计行数,或——lines:只显示列数;。
-m # 统计字符数。这个标志不能与 -c 标志一起使用。
-w # 统计字数,或——words:只显示字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
-L # 打印最长行的长度。
//真实案例
wc -l nowcoder.txt;
运行结果为:4 nowcoder.txt;包含文件名,改用:
通过输入流:
wc -l < nowcoder.txt
通过管道
cat nowcoder.txt | wc -l
运行结果为:4
SHELL2-打印文件的指定行数
-n 输出行
-c 输出字节
tail命令:从文件尾部进行查询
tail
1、tail -f nowcoder.txt : 实时输出文件的最新更新内容;
2、tail -n 5 nowcoder.txt [或者:tail -5 nowcoder.txt] : 输出文件的最后5行;
3、tail -n +5 nowcoder.txt : 输出从第5行开始到文件结尾的内容;
4、tail -n -5 nowcoder.txt : 输出从倒数 第五行开始到文件结尾的内容;
5、tail nowcoder.txt : 不加任何参数,默认输出10行;
6、tail -c 5 nowcoder.txt : 表示输出文件最后5个字节;
head命令:从文件头部进行查询
head
SHELL3-输出0到500中7的倍数
seq 0 7 500
根本没用上循环。。。
seq命令:用于产生从某个数到另外一个数之间的所有整数
都是格式设置:
-f
seq -f "str%03g" 9 11
str009
str010
str011
-s 指定分隔符
-w 输出同宽
SHELL4-输出第5行
head -n 5 nowcoder.txt | tail -n 1
SHELL5-打印空行的行号
grep -n '^$' nowcoder.txt | awk -F: '{print $1}'
#grep输出带:,使用awk以引号作为分隔,输出数据。
awk '/^$/{print NR}' nowcoder.txt
sed -n '/^$/=' nowcoder.txt
/^$/表示空字符串即该行是空字符串即空行
{}是对匹配的行执行的命令 NR是行号,即匹配行的行号
awk命令:是一种处理文本文件的语言,是一个强大的文本分析工具。
用法一:awk '{[pattern] action}' {filenames}
用法二:awk -F #-F相当于内置变量FS, 指定分割字符
用法三:
支持正则的表达式:grep;sed;egrep;awk
grep
-n :表示显示行号 xx:(输出带引号)
-i :表示不区分大小写
-v :表示反向过滤(取反)
[ ]:查找集合字符
SHELL6-去掉空行
awk '{if(!/^$/)print $NR}' nowcoder.txt
#$NR代表输出NR行(当前行)的内容
grep -v '^$' nowcoder.txt
sed '/^$/d' .txt
#-v 删除行