shell 编程
正则表达式
字符串截取命令
cut 命令
按列提取字符串命令
语法:cut [选项] 文件名
选项:
-f 列号: 提取第几列
-d 分隔符 按照指定分隔符分割列 默认以制表符分割
eg: cut -f 2 -d : /etc/passwd 提取/etc/passwd文件的第2列以":"分割
et: cat /etc/passwd | grep '/bin/bash' | cut -f 1,2 -d :
printf 命令
格式化打印命令
eg:printf %s 1 2 3 4 5 6
eg:printf '%s %s' 1 2 3 4 5 6 #两个字符作为一组字符串输出
eg:printf '%s %s %s' 1 2 3 4 5 6 #三个字符作为一组字符串输出
eg:printf '%s %s %s\n' 1 2 3 4 5 6 #两个字符作为一组字符串且换行输出
awk 命令
强大的文本分析工具
BEGIN 在执行数据读取之前先执行BEGIN后面的那个动作
END 在执行数据读取结束后执行END后面的那个动作
sed 命令
行编辑器命令
eg:sed '1,3d' read.sh 删除第1~3行的内容,不会修改文件本身
eg:sed -n '2p' sum.sh 查看sum.sh第二行的内容
eg:sed '2a nihao' sum.sh 查看sum.sh的内容,并在第2行后面加入"nihao" 字符串
sort 命令
排序
eg:sort /etc/passwd # 按字符串排序显示"/etc/passwd"文件内容
eg:sort -r sum.sh # 倒序显示sum.sh的文件内容。
wc 命令:
统计指定文件的行数、字数、字符数、字节数
语法:wc [选项] [文件名]
-c 统计字节数
-m 统计字符数
-w 统计单词数
-l 统计行数
eg: wc -c repl1.conf 统计 repl1.conf 文件中的字节数。
ctrl+d 结束控制台字数统计。
条件判断
条件判断的两种格式
判断当前路径下是否存在read.sh文件
格式一:test -e read.sh
格式二:[ -e read.sh ]
[ -e read.sh ] && echo yes || echo no
eg:
[ -e read.sh ] && echo yes || echo no 判断当前路径下read.sh文件是否存在。存在输出yes,不存在输出no
[ -x read.sh ] && echo yes || echo no 判断当前路径下read.sh文件是否存在,并且是否拥有执行权限
eg:
[ read.sh -nt sum.sh ] && echo yes || echo no
eg:
[ 2 -gt 1 ] && echo yes || echo no
eg:
[ "abc" == "abc" ] && echo yes || echo no
aa=23
[ -n "$aa" -a $aa -gt 21 ] && echo yes || echo no
aa=20
[ -n "$aa" -a $aa -gt 21 ] && echo yes || echo no
流程控制
if
case
for 循环
eg: for1.sh
#!bin/bash
for i in $(ls)
do
echo $i;
done
eg: for2.sh
#!bin/bash
sum=0;
for((i=1;i<=100;i++))
do
sum=$(($sum+$i));
done
echo "the sum is :$sum";
while 循环
eg:while.sh 用while 求1+2+3+...+100的和
#!/bin/bash
i=1;
sum=0;
while [ "$i" -le 100 ]
do
sum=$(($sum+$i));
i=$(($i+1));
done
echo $sum
until 循环
unti循环和while循环刚好相反,当循环不成立则进行until循环。