基础xshell学习笔记
一,shell概述
shell是一个命令行解释器,用来接受应用程序命令/用户命令,然后调用操作系统内核(linux内核),控制硬件
shell的特点:功能强大的的编程语言,易编写,易调试,灵活性强,可读性强
二,变量
1>,系统级变量
$HOME
$PWD
$SHELL echo $SHELL 解释器
$USER echo $USER 当前用户
2>,定义变量
2.1 变量=值 A=112 echo $A
2.2 撤销变量 unset A
2.3 定义静态变量 readonly B=3 echo $B 不能unset B
注意!!! 1,环境变量尽量大写
2,定义变量值如有空值,用双引号或单引号 D="wangbin xiang jiaxin"
2.4 定义全局变量 export D
3>,特殊变量 $n
3.1 $n n为数字,$0代表该脚本名称 $1-$9 代表1-9个参数,十个以上的参数用{} ${10}
3.2 $# 统计参数个数
3.3 $* 代表所有的参数,把所有参数看为一个整体
$@ 代表所有的参数,把每个参数区分对待
3.4 $? 最后一个执行命令状态,0正常,非0不正确
三,shell命令
ll | grep sh 查看(筛选)该目录下文件名中有sh的文件
echo "java" 输入"java"
mkdir dates 创建一个dates的文件夹
touch start.sh 创建一个start的shell脚本文件
vim start.sh 打开编写start.sh文本 :q! 强制推出(不保存),:wq! 保存推出
cat banzhang.txt 打印出banzhang文件的 -n 行号 -A 显示出来(包含特殊字符) -E 显示断行字符$ -T [tab] 按键以 ^I 显示 -v 显示出看不出来的特殊字符
rm -f 文件名
rm -rf 目录名字
四,运算符
"$((运算符))"或"$[运算符]"
expr \*乘,/除,%取余 必须要有空格 expr `expr 2 + 3` \* 3 (2+3)*3
五,条件判断
1>, [ condition ] 前后都有空格 ,条件非空true [ fee ] true ,[]返回false
-lt 小于 -le 小于等于 -eq 等于
-gt date -ge 大于等于 -ne 不等于
[ 23 -ge 22 ] 23>=22
2>,权限判断
-r 只读 -w 有写权限 -x 有执行权限
[ -w hellworld.sh ]
3>,文件类型判断
-f 文件存在且是否为一个常规文件
-e 文件存在
-d 文件存在且为目录
六,流程控制
1>,if判断
if [ 条件控制表达式 ];then
程序
fi
或者
if [ 条件控制表达式 ]
then
程序
fi
注意!! if后空格,条件控制表达式前后都要有空格
2>,case
case $1 in
1)
echo "wangbin11"
;;
2)
echo "xiaocui22"
;;
*)
echo "wangchao33"
;;
esac
3>,for循环
s=0
for((i=0;i<=100;i++))
do
s=$[$s+$i]
done
echo $s
for i in "$*" 所有的值为一个整体打印出来
do
echo "wangbin xiang jiaxin $i"
done
for j in "$@" 还是每个分批次打印
do
echo "wangbin xiang $j"
done
-------------------------------------
4> while
while [ 条件判断 ]
do
程序
done
s=0
i=1
while [ $i -le 100 ]
do
s=$[$s+$i]
i=$[$i+1]
done
echo $s
七,read读取控制台输入
read 选项 参数
选项:-p 读取值的提示符 -t 读取值时等待时间
参数:指定读取值时变量
read -t 7 -p "input your name" NAME
echo $NAME
输入你的名字,等会七秒超时
八,函数
1>系统函数
1.1,basename 截取文件名称
1.2,dirname 截取文件全路径,不包括文件名
2>,自定义函数 三个数求和
function sum(){
s=0
s=$[$1+$2+$3]
echo $s
}
read -p "input your canshu1:" t
read -p "input your canshu2:" i
read -p "input your canshu3:" o
sum $t $i $o
九,shell的工具 ***
1>cut ,剪,负责剪切数据
-f 列号
-d 分隔符
cut -d " " -f 3 cut.txt 以" "分列,取第三列的数据
cat cut.txt | grep wangbin 取wangbin 这个行的数据
cat cut.txt | grep wangbin | cut -d " " -f 1 取wangbin 这个行的数据,以" "分列,取第1列的数据
echo $PATH | cut -d : -f 3- 获取系统变量path,以:分列,第3列后面的路径
ifconfig ens160 | grep "inet " | cut -d " " -f 10 "172.20.130.111"
2>sed,流编辑器,一次处理一行内容,处理完的存在行临时缓存区"模式空间",用sed处理缓存区的内容,处理一行,打印一行
a 增加 d 删除 s 查询替换 -e
sed "2a sha bi" sed.txt 第二行中增加”sha bi“
sed "/wang/d" sed.txt 将包含”wang“的这一行删掉
sed "s/xiao/wang/g" sed.txt g:全局,xiao替换成wang
3>awk,
3.1
-F 文件拆分隔符
-v 赋值一个用户定义的变量
pattern:匹配模式 action:找到匹配内容后做的操作
sudo chown weblogic:weblogic passwd 修改权限
awk -F : '/^root/{print $7}' passwd 以:分列,匹配以root开头 打印第七列
awk -F : '/^root/{print $1","$7}' passwd
awk -F : 'BEGIN{print "wangbin"} {print $1","$7} END{print "wangbinzuishuai"}' passwd 开头打印wangbin 中间以:分列,打印第一行,第七行,结尾打印wangbinzuishuai
awk -F : 'BEGIN{print "wang,bin"} /^root/ {print $1","$7} END {print "wangbinzuishuai"}' passwd
awk -F : -v i=2 '{print $3+i}' passwd 定义变量i=2,第三列加i
3.2 awk内置变量
FILENAME 文件名 NR 已读的记录数 NF 记录列数
awk -F : '{print FILENAME "," NR "," NF}' passwd
ifconfig ens160 | grep "inet " | awk -F " " '{print $2}'
3.3 正则表达式
\:将下一字符标记为特殊字符,文本,反向引用或八进制转义符 \n 换行符, \\\\匹配\,\\(匹配(
^:匹配字符串开始的位置
$:匹配字符串结束的位置
*:0次或多次匹配前面字符或子表达式
*********************面试题**************************
awk '/^$/ {print NR}' sed.txt 查看第几行有为空
4>sort 排序
-n :按数值大小排序
-r :相反的数据排序 (倒排序)
-t : 设置排序所用到的分割字符
-k :指定排序的列
sort -t : -nrk 5 sort.sh 以:分列,按照第五列倒序排序
十 面试题
1,查询file1文件中空行的行号
awk '/^$/ {print Nr}' file1.txt 数据清洗,简称ETL
2,文件chengji.txt内容如下
张三 40
李四 60
王五 70
计算第二里的和并输出
cat chengji.txt | awk -F " " '{sum+=$2} END {print sum}'
3,判断一个文件是否存在
#/bin/bash
if [ -e file.txt ]; then
echo "存在";
else
echo "不存在";
fi
4,排序
sort -n text.txt
5,查找当前文件夹/home下所有文本文本内容中有"shen"的文件名
grep -r shen /home | cut -d : -f1
------------------------------------------------------------
1.禁用防火墙
systemctl stop firewalld
2.启动防火墙
systemctl start firewalld
3.nohup ./startWebLogic.sh & >weblogic.log 生成一个pid,启动日志
4.grep -r redis
nohup ./startWebLogic.sh & tail -f nohup.out
chmod 777 repcms.sh
chmod a+x repcms.sh
/usr/local/redis-5.0.6/bin ./redis-server redis.conf
find . -name xxx.txt 查找文件名