文件内容查看命令2
1.在Linux的shell编程里面,整数的运算使用双元括号:(())
[root@mysql-proxy-1 ~]# c=$(($a+$b)) 将变量a和b进行加法运算,然后将运算的结果赋值给c变量
2.命令替换:将一条命令的执行结果赋值给变量,有两种方式
2.1 方法一:使用括号:varname=$(命令执行的结果)
[root@mysql-proxy-1 lianxi]# num1=$(cat name.txt |wc -l)
[root@mysql-proxy-1 lianxi]# echo $num1
27
2.2 方法二:使用反引号:varname=命令执行的结果
[root@mysql-proxy-1 lianxi]# num2=`cat name.txt|wc -l`
[root@mysql-proxy-1 lianxi]# echo $num2
27
2.3 两者的区别:使用括号可以嵌套,使用反引号不可以,所以一般推荐使用第一种方法
[root@xiaoliu lianxi]# num1=$(cat $(ls name.txt)|wc -l)
[root@xiaoliu lianxi]# cat name.txt -n
1 lhj
2 zj
3 wjl
4 lcx
5 lx
6 zjj
7 llq
8 xxh
9 fmy
10 cjw
11 wjx
12 cxw
13 wsh
14 yby
15 zyj
16 chx
17 smm
18 ysy
19 zyw
[root@xiaoliu lianxi]# echo $num1
19
3.解释 $0 $1 $2 $$ $? $* $@ $# 分别是什么意思;
3.1 $? 代表上一条命令的返回值
返回值为0 说明上一条命令执行成功 返回值为非0 说明上一条命令执行失败 1 参数或者选项出错 2 参数或者选项出错 127 --》命令不存在
[root@mysql-proxy-1 lianxi]# fjdkfjdfjkd
-bash: fjdkfjdfjkd: 未找到命令
[root@mysql-proxy-1 lianxi]# echo $?
127
[root@mysql-proxy-1 lianxi]# mkdir /songyuxiao
[root@mysql-proxy-1 lianxi]# mkdir /songyuxiao
mkdir: 无法创建目录"/songyuxiao": 文件已存在
[root@mysql-proxy-1 lianxi]# echo $?
1
3.2 $0 显示脚本名
3.3 $1、$2 属于位置变量,其作用就是往脚本里传递参数 --》传参
3.4 $$ 代表当前终端的pid号(进程号)
[root@mysql-proxy-1 lianxi]# echo $$
7014
3.5 $# 代表文件里面一共有多少位置变量
3.6 $@ 统计所有变量的名称
3.7 $* 统计所有变量的名称
3.8 代码解释
[root@xiaoliu lianxi]# cat post_var.sh
#!/bin/bash
echo "第1个位置变量是$1"
echo "第2个位置变量是$2"
echo "第3个位置变量是$3"
echo "第4个位置变量是$4"
echo "第5个位置变量是$5"
echo "第6个位置变量是$6"
echo "脚本名是$0"
echo "一共有$#个位置变量"
echo "所有的位置变量是 $*"
echo "所有的位置变量是 $@"
[root@xiaoliu lianxi]# bash post_var.sh lhj lzx czm twj xsw qx
第1个位置变量是lhj
第2个位置变量是lzx
第3个位置变量是czm
第4个位置变量是twj
第5个位置变量是xsw
第6个位置变量是qx
脚本名是post_var.sh
一共有6个位置变量
所有的位置变量是 lhj lzx czm twj xsw qx
所有的位置变量是 lhj lzx czm twj xsw qx
4. ; 命令连接符,不管前面的命令执行成功还是失败,都会执行后面的命令
命令1; 命令2;命令3
5.if 判断
5.1.单分支–》一种情况
-
if 命令 --》命令执行成功就是条件成立,就执行then后面的command命令 ,条件不成立就不执行command命令
then
command
fi
-
if 命令 ; then --》命令执行成功就是条件成立,就执行then后面的命令
command
fi
5.2.双分支–》2种情况
if (( $i == 5 )) --》命令执行成功就是条件成立,就执行then后面的命令,不成功就执行else后面的命令
then
continue
else
mkdir fengdeyong$i
fi
5.3 判断文件是否存在且是否为文件:[ -f file ] --》file
[root@xiaoliu lianxi]# [ -f lucky.txt ]
[root@xiaoliu lianxi]# echo $?
0
[root@xiaoliu lianxi]# [ -f home ]
[root@xiaoliu lianxi]# echo $?
1
5.4 判断文件是否存在且是否为目录文件:[ -d file ] --》directory
[root@xiaoliu lianxi]# [ -d home ]
[root@xiaoliu lianxi]# echo $?
0
[root@xiaoliu lianxi]# [ -d lucky.txt ]
[root@xiaoliu lianxi]# echo $?
1
5.5 判断字符串的长度是否为0:[ -z feng]
[root@mysql-proxy-1 lianxi]# sg=
[root@mysql-proxy-1 lianxi]# [ -z $sg ]
[root@mysql-proxy-1 lianxi]# echo $?
0
[root@mysql-proxy-1 lianxi]# sg=wuyangming
[root@mysql-proxy-1 lianxi]# [ -z $sg ]
[root@mysql-proxy-1 lianxi]# echo $?
1
6.while 循环
6.1 控制循环次数:
i=1
while ((i<10))
do
echo $i
mkdir -p chenlu$i
((i++)) #自增运算
done
6.2 死循环
k=1
while true
do
((k++))
if ((k==3));then
continue
fi
echo $k
sleep 1
if ((k==8));then
break
fi
done
7.文本处理3剑客:
7.1 grep 文本过滤的命令,根据字符串去匹配,默认会显示符号要求的行
- ^ 代表以什么开头
[root@mysql-proxy-1 lianxi]# cat name.txt |grep "^li"
liuchenxi
liuxing
- $ 代表以什么结尾
[root@mysql-proxy-1 lianxi]# cat name.txt |grep "g$" 以g结尾的行
xiongyiyang
liuxing
lilanqing
3.精准匹配
[root@mysql-proxy-1 lianxi]# cat name.txt |grep "^lilan$" # 一行里只有lilan,不能多也不能少,必须要完全匹配
lilan
4.结合判断命令,判断过滤的字符串长度是否为零:
[root@mysql-proxy-1 lianxi]# [[ -z $(cat name.txt |grep "^fengdeyong$") ]]
[root@mysql-proxy-1 lianxi]# echo $?
1
7.2 sed 文本替换和删除的命令,可以直接在文件里删除和替换文本
-i 直接在原文件里进行操作 /$name/ 查找变量name的内容 d 是sed里的命令,执行删除操作的 delete sed 引用shell里定义的变量,必须使用双引号,不能使用单引号
1.根据匹配的字符串来删除
[root@xiaoliu lianxi]# name=smm
[root@xiaoliu lianxi]# cat name1.txt
lhj
zj
smm
llq
zzj
zyw
[root@xiaoliu lianxi]# sed -i "/$name/d " name1.txt
[root@xiaoliu lianxi]# cat name1.txt
lhj
zj
llq
zzj
zyw
2.根据行号来删除
[root@xiaoliu lianxi]# num=5
[root@xiaoliu lianxi]# cat name1.txt
lhj
zj
llq
zzj
zyw
[root@xiaoliu lianxi]# sed -i "$num d " name1.txt
[root@xiaoliu lianxi]# cat name1.txt
lhj
zj
llq
zzj
3.精准匹配
[root@mysql-proxy-1 lianxi]# cat name2.txt
liuxing
liuxing2
liuxing3
liuxing4
[root@mysql-proxy-1 lianxi]# name=liuxing
[root@mysql-proxy-1 lianxi]# sed -i "/^$name$/d" name2.txt
[root@mysql-proxy-1 lianxi]# cat name2.txt
liuxing2
liuxing3
liuxing4
7.3 awk 文本截取
8 vim编辑器:vim编辑器分为命令模式、插入模式和末行模式
8.1 命令模式下的快捷键
1.yy 复制当前行 copy 2.p 粘贴 paste 3.dd 删除当前行/剪切 4.u 撤销 5. ctrl + r 恢复
8.2 插入模式:按i进入插入模式
8.3 末行模式
- :wq 退出并保存
- :w 保存
- :wq!强制退出并且保存
- : q! 强制退出不保存
- : q 退出
- :set nu 给里面的内容每行进行编号
|