Linux-bash复习

Linux 复习

命令 --help ls --help

  • *模糊匹配

1.ls

  • ls [参数] [路径]
  • ls
  • ls -a 显示所有文件
  • ls -l = ll 暂时当前对文件的权限
  • ls -al 权限+所有文件
  • ls -al /etc

2.pwd

当前路径

  • last -n x #最近x次登录的用户

3.cd

  • .. 上级目录
  • ./ 当前目录
  • / 根目录
  • ~ 用户目录 /home ,root用户在 /root

4.文件、目录创建

  • mkdir [目录]
  • mkdir -p 多层级目录 递归
  • touch 文件名 创建文件
  • vi 文件 ==vim 文件 进入文件(没有就创建)
  • nano 1.txt
    yum install nano 一个工具 卸载nano

yum remove nano

5.删除

  • rmdir 删除空的文件、目录
  • rmdir -p 层级删除 从下级往上删
  • rm 文件 会二次确认
  • rm -f 文件 不会询问
  • rm -rf 路径、文件 r 递归
  • rm -rf *.txt 模糊匹配删除
  • clear 清除屏幕

6.查看文件

cat

  • cat 文件名
  • more 文件名 超出屏幕 只显示一屏 空格切换下一屏 enter换行
  • less 文件名 也是分屏 可以上下键翻行

tail

  • tail -f 文件名 可以跟多个文件名 动态监听着文件,比如日志
  • tail -10 文件名 显示最后10行

7.写入文件

  • ‘>’ 覆盖写入
  • ‘>>’ 追加写入 echo test >> test.log

复制、移动

  • cp 源文件 目标文件(路径) 复制
  • mv 文件 目标路径 移动
  • mv b.txt c.txt 重命名

8.压缩 解压

压缩

  • tar -cvf 名称.tar a.txt b.txt 将a.txt b.txt 打包到tar包
  • tar -zcvf 名称.gz a.txt b.txt 将a.txt b.txt 打包到gz包 (也可以tar文件)
  1. c 表示创建新的归档文件
  2. v 列出打包的具体文件
  3. f 将被打包的文件
  4. z gzip方式

解压

  • tar -xvf xx.tar
  • tar -zxvf xx.gz (如果tar文件的压缩方式是gzip,也可以解压tar文件)
  • tar -zxvf xx.gz -C 目录 解压到指定目录

9.文件查找

  • find /root(目录) -name(以名称查找) "*a.txt" -ls(列出来)
  • find /root -user root -ls 以用户组为root的查找
  • find /root -perm -777 按权限查找,777的权限
  • which xx 只能找已加入环境变量的路径
[root@tongjc ~]# which python
/usr/bin/python

awk 字符串切割

  • awk ‘{print $0}‘ #默认是以空格分割
  • awk -F ‘‘ ‘{print $0}‘ #可以指定分隔符
[root@tongjc ~]# echo "123|456|789" | awk -F ‘|‘ ‘{print $0}‘
123|456|789
[root@tongjc ~]# echo "123|456|789" | awk -F ‘|‘ ‘{print $1}‘
123
[root@tongjc ~]# echo "123|456|789" | awk -F ‘|‘ ‘{print $2}‘
456
[root@tongjc ~]# echo "123|456|789" | awk -F ‘|‘ ‘{print $3}‘
789
  • 以多个字符切割 | 代表或
[root@tongjc ~]# echo "123+456-789" | awk -F ‘+|-‘ ‘{print $0}‘
123+456-789
[root@tongjc ~]# echo "123+456-789" | awk -F ‘+|-‘ ‘{print $1}‘
123
[root@tongjc ~]# echo "123+456-789" | awk -F ‘+|-‘ ‘{print $2}‘
456
[root@tongjc ~]# echo "123+456-789" | awk -F ‘+|-‘ ‘{print $3}‘
789 
  • 切割后同时获取多个数据
# 数据紧挨着
[root@tongjc etc]# cat passwd |awk -F ‘:‘ ‘{print $1$4}‘
root0
bin1
daemon2
adm4
lp7
sync0
shutdown0
halt0
mail12

# 数据以空格隔开   使用的是逗号
[root@tongjc etc]# cat passwd |awk -F ‘:‘ ‘{print $1,$7}‘
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
sync /bin/sync

# 也可以"\t"分割  "\n"也可以 "--"自定义的符号也可以
[root@tongjc etc]# cat passwd |awk -F ‘:‘ ‘{print $1"\t"$7}‘
root    /bin/bash
bin     /sbin/nologin
daemon  /sbin/nologin
adm     /sbin/nologin
lp      /sbin/nologin
sync    /bin/sync

  • BEGIN END
echo -e "1|2|3\n4|5|6\n7|8|9" | awk -F ‘|‘ ‘BEGIN{a=0}{a=a+$2}END{print a}‘
15
  • 练习1
[root@tongjc home]# cat /etc/passwd |  awk -F ‘:‘ ‘BEGIN{count=0}{name[count]=$1;count++}END{for(i=0;i<NR;i++)print i,name[i]}‘
0 root
1 bin
2 daemon
3 adm
4 lp
5 sync
6 shutdown
7 halt
8 mail
9 operator
10 games
11 ftp
12 nobody
13 systemd-network
14 dbus
15 polkitd
16 sshd
17 postfix
18 chrony
19 tss
  • 练习2
从testerhome中取处赞数
a=`curl -s https://testerhome.com/topics | grep -o ‘href="/topics/[0-9]*"‘ | awk -F ‘/|"‘ ‘{print $4}‘`; for id in $a;do url=‘https://testerhome.com/topics/‘$id;zan=`curl -s $url | grep -o -m1 ‘[0-9]* 个赞‘`;if [ -n "$zan" ];then echo $url"有: " $zan;else echo $url"有: " "0 个赞";fi  done | awk -F ‘/‘ ‘{print $NF}‘

https://testerhome.com/topics/23275有:  0 个赞
https://testerhome.com/topics/23192有:  0 个赞
https://testerhome.com/topics/23301有:  9 个赞
https://testerhome.com/topics/23362有:  0 个赞
https://testerhome.com/topics/23355有:  0 个赞
https://testerhome.com/topics/23326有:  0 个赞
https://testerhome.com/topics/23271有:  1 个赞
https://testerhome.com/topics/23266有:  0 个赞

写入shell脚本

#!/bin/bash
a=`curl -s https://testerhome.com/topics | grep -o ‘href="/topics/[0-9]*"‘ | awk -F ‘/|"‘ ‘{print $4}‘`
for id in $a
do
        url=‘https://testerhome.com/topics/‘$id
        zan=`curl -s $url | grep -o -m1 ‘[0-9]* 个赞‘`
        if [ -n "$zan" ]
                then
                        echo $url"有: " $zan
                else
                        echo $url"有: " "0 个赞"
        fi
done | awk -F ‘/‘ ‘{print $NF}‘

文本搜索grep

  • grep error 文件名 比如:log文件
  • grep -i 忽略大小写
[root@tongjc ~]# grep "hello" 1
hellodssd ss
hello from tjc
[root@tongjc ~]# grep -i "hello" 1
HELLO FROM TJC
hellodssd ss
hello from tjc
  • grep -o 只显示匹配到的内容
[root@tongjc ~]# cat 1 | grep -o "hello"
hello
hello
  • . *
    . 表示一个字符

    * 表示任意多个字符

[root@tongjc ~]# echo abcdeee | grep -o "c.*"
cdeee
[root@tongjc ~]# echo abcdeeee | grep -o "c."
cd
  • 结合管道
[root@tongjc ~]# cat 1 | grep -i "hello"
HELLO FROM TJC
hellodssd ss
hello from tjc
  • curl
curl -s http://www.baidu.com/s?wd=罗志祥 | grep "结果约"
  • 结合正则
[root@tongjc ~]# curl -s http://www.baidu.com/s?wd=罗志祥 | grep -o "结果约[0-9]"
结果约4
[root@tongjc ~]# curl -s http://www.baidu.com/s?wd=罗志祥 | grep -o "结果约[0-9]*"
结果约428
[root@tongjc ~]# curl -s http://www.baidu.com/s?wd=罗志祥 | grep -o "结果约[0-9,]*" 
结果约428,000
  • 实际运用
[root@tongjc ~]# echo mp3 >> baidu.keyword
[root@tongjc ~]# echo 罗志祥 >> baidu.keyword
[root@tongjc ~]# echo 周扬青 >> baidu.keyword
[root@tongjc ~]# while read x;do echo $x;curl -s http://www.baidu.com/s?wd=$x;done < baidu.keyword | grep -o "结果约[0-9,]*"
结果约1,370,000
结果约425,000
结果约191,000
  • tailf test.json | grep XXX

sed 文本替换

  • sed ‘s/aaa/bbb‘
  • sed ‘s/aaa/bbb/g‘ #全部替换
[root@tongjc ~]# echo "cat dog fish cat" | sed ‘s/cat/wulala/‘
wulala dog fish cat
[root@tongjc ~]# echo "cat dog fish cat" | sed ‘s/cat/wulala/g‘
wulala dog fish wulala

也可以使用#分隔

[root@tongjc ~]# echo "cat hello fish tjc --cat ;;cat" | sed ‘s#cat#hahaha#g‘
  • sed替换时先将内容读到一个模式空间,替换的只是模式空间里面的内容,真实的内容并没有被替换

需要使用sed -i 来替换

[root@tongjc ~]# sed ‘s/mp3/AAAAAAAA/g‘ baidu.keyword 
AAAAAAAA
罗志祥
周扬青
[root@tongjc ~]# cat baidu.keyword 
mp3
罗志祥
周扬青
[root@tongjc ~]# sed -i ‘s/mp3/AAAAAAAA/g‘ baidu.keyword 
[root@tongjc ~]# cat baidu.keyword 
AAAAAAAA
罗志祥
周扬青
  • 替换防止手滑 备份很重要

-i.bak 备份

[root@tongjc ~]# sed -i.bak ‘s/mp3/AAAAAAAA/g‘ baidu.keyword 
[root@tongjc ~]# ll
总用量 10092
-rw-r--r--  1 root root       61 427 21:01 1
-rw-------. 1 root root     1202 35 11:21 anaconda-ks.cfg
-rw-r--r--  1 root root 10312541 426 15:17 apache-tomcat-8.5.54.tar.gz
-rw-r--r--  1 root root       29 428 12:16 baidu.keyword
-rw-r--r--  1 root root       29 428 11:29 baidu.keyword.bak

10.vi vim编辑器

  • i 在当前位置前插入
  • I 在当前行首插入
  • a 在当前位置后插入
  • A 在当前行尾插入
  • o 在当前行之后插入一行
  • O 在当前行之前插入一行 命令行里输入 /aa(内容) 直接跳转到相应内容的位置
  • :wq 保存退出
  • :q! 退出不保存
  • dd 删除一行
  • yy 复制当前行
  • p 粘贴
  • n+yy 复制当前到后n行
  • R 替换

11.重定向

  • cat /root/home/test.json >> ./test.txt
  • 注意‘>‘,‘>>‘ 覆盖和追加

12.系统管理命令

ps

  • ps 查看当前的进程
  • ps -e 显示所有进程
  • ps -f 显示当前进程--全格式
  • ps -es |grep java 查看所有java所有进程
  • jps -l 看java进程
  • kill -9 进程id 强制杀进程
  • echo $$ 显示当前进程id
# bash里还可以启bash 
[root@tongjc ~]# echo $$
1040
[root@tongjc ~]# bash
[root@tongjc ~]# echo $$
1211
[root@tongjc ~]# exit
exit
[root@tongjc ~]# echo $$
1040

子进程

变量作用域只在子线程内 新进程

[root@tongjc ~]# a=222
[root@tongjc ~]# (a=1;echo $a);echo $a
1
222
#区别
[root@tongjc ~]# a=222
[root@tongjc ~]# { a=1;echo $a; };echo $a; 
1
1
  • 将程序放到后台执行

&

[root@tongjc ~]# sleep 10&
[1] 1421
  • jobs
[root@tongjc ~]# sleep 20&
[1] 1440
[root@tongjc ~]# jobs
[1]+  运行中               sleep 20 & 
  • Ctrl+Z 停止前台的进程
  • bg x 继续执行
[root@tongjc ~]# sleep 100
^Z[1]   完成                  sleep 20

[2]+  已停止               sleep 100
[root@tongjc ~]# bg 2
[2]+ sleep 100 &
[root@tongjc ~]# jobs
[2]+  运行中               sleep 100 &
  • fg x 后台进程调到前台执行
[root@tongjc ~]# sleep 100&
[1] 1466
[root@tongjc ~]# jobs
[1]+  运行中               sleep 100 &
[root@tongjc ~]# fg 1
sleep 100

管道

将前面输出结果作为输入 cat /root/home/test.json | more

13.权限

  • su root 用户切换 -rw-r--r-- 1 root root 0 4月 26 10:58 aa.txt
  • 第一个位置代表文件类型 d 代表文件夹 -代表普通文件 c设备文件 l 软连接(ls -s b.txt b)访问b的时候就相当于访问b.txt 类似快捷键
  • 文件读写执行权限
  • 类别 用户组 组内 其他
  • ugo user group other
  • r read 1
  • w write 2
  • x excute 4

权限修改

  • chmod ugo=rwx 111.txt
  • chmod 777 xxx 分别对应ugo
  • chmod +x test1.sh 增加执行权限
  • chmod u+x xxx user增加执行权限

14.网络操作

  • ip addr 主机ip (ifconfig)
  • hostname 主机名称 cat /etc/hostname
  • hostname xxx 修改hostname(当前生效,重启失效)
  • vi /etc/hostname 永久修改主机名

域名和ip映射

  • 配置host vi /etc/hosts
  • 当前ip 主机名

修改ip

配置文件 修改(百度) 然后重启ip service network restart

关闭防火墙

  • systemctl stop firewalld.service

环境变量

在~目录 vi .bash_profile

  • 添加环境变量: export PATH=$PATH:/XXXX/XXX

然后执行:source ~/.bash_profile

环境变量添加后,就可以在任意路径执行环境变量下的文件

  • echo $PATH 输出当前的环境变量

安装软件

更换centos的软件源

1.下载源仓库文件,xxx.repo,,curl -o /etc/yum.repos.d/ali.repo http://mirrors.aliyun.com/repo/Centos-7.repo

2.将repo文件保存到/etc/yum.repos.d/目录中

3.让当前库文件生效 yum clean cache yum makecache

1.二进制安装

软件已经编译和打包,只需下载解压即可安装

  • 下载jdk
  • 上传linux root
  • 解压 tar -xzvf jdk包
  • bin java
  • 全局起作用,配置环境变量

2.RPM包

软件按照redhat管理要求规范,RPM包进行发布,需要获取相应软件rpm包安装 有一个远程服务器,通过命令下载

3.Yum在线安装

rpm包已经在服务器 在线下载 安装 其他依赖包也会帮你下载下来

yum install -y nano

  • 查看已安装 yum list installed | grep nano
  • 卸载 yum remove nano

4.源码安装

软件以源码工程的方式发布,需要获取源码进行编译安装

shell

命令语言 程序设计语言 xx.sh

#!/bin/bash
    echo hello
  • 执行1 ./xx.sh --执行2 sh xx.sh --执行3 /bin/sh xx.sh

变量

1.变量定义 a=1 等号两边不能有空格 a=1;b=2

echo $a  引用变量a
[root@tongjc ~]# a=‘hello world‘    有空格必须带上引号
[root@tongjc ~]# echo a
a
[root@tongjc ~]# echo $a
hello world

2.单引号和双引号的区别 单引号中不能直接引用变量,会被当作字符串

[root@tongjc ~]# a="hello world"
[root@tongjc ~]# echo ‘xiaowang $a‘
xiaowang $a
[root@tongjc ~]# echo "xiaowang $a"
xiaowang hello world

3.变量引用最好{}

[root@tongjc ~]# a="hello world"
[root@tongjc ~]# echo $a_1

[root@tongjc ~]# echo $a _1
hello world _1
[root@tongjc ~]# echo ${a} _1
hello world _1
[root@tongjc ~]# echo ${a}_1
hello world_1

4.预定义变量

[root@tongjc ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@tongjc ~]# echo $PWD
/root
[root@tongjc ~]# echo $USER
root
#!/bin/bash
name="zhangsan"  #等号不能空格
echo $name
echo ${name}
echo "你好"

5.数组

  • 定义: (aaa bbb ccc)
[root@tongjc ~]# a=(1 2 3 4 5)
[root@tongjc ~]# echo $a
1
[root@tongjc ~]# echo ${a[*]}
1 2 3 4 5  
[root@tongjc ~]# echo ${a[@]} 
1 2 3 4 5
  • 取值: array_name[index]
[root@tongjc ~]# a=(1 2 3 4 5)
[root@tongjc ~]# echo ${a[-1]}
5
[root@tongjc ~]# echo ${a[-2]}
4
  • 数组长度: #array_name[@]
[root@tongjc ~]# echo ${#a[*]}
5
  • 元素长度: #array_name[1]
#!/bin/bash
array_name=(a b11111 c2)
echo ${array_name[1]} #取出index对应值
echo ${array_name[@]} #取出所有值 @ * 都可以
echo ${#array_name[@]} #打印长度
echo ${array_name[1]} #b11111的长度

6.命令的返回值赋给变量

  • 通过`` 反引号
[root@tongjc ~]# ls
anaconda-ks.cfg  apache-tomcat-8.5.54.tar.gz  home  soft
[root@tongjc ~]# a=`ls`
[root@tongjc ~]# echo $a
anaconda-ks.cfg apache-tomcat-8.5.54.tar.gz home soft
[root@tongjc ~]# echo my dir is $(ls)
my dir is anaconda-ks.cfg apache-tomcat-8.5.54.tar.gz home soft    #不是所有系统都支持
  • 赋值给数组
[root@tongjc ~]# a=(`ls`)
[root@tongjc ~]# echo $a
anaconda-ks.cfg
[root@tongjc ~]# echo ${a[*]}
anaconda-ks.cfg apache-tomcat-8.5.54.tar.gz home soft

7.特殊符号

  • \
    -e 表示开启转译模式
[root@tongjc ~]# echo "a\nbb"
a\nbb
[root@tongjc ~]# echo -e "a\nbb"
a
bb
[root@tongjc ~]# echo "a\"bb"
a"bb
  • $(())
    对变量进行操作
[root@tongjc ~]# a=1;b=2
[root@tongjc ~]# echo $((a+b))
3
[root@tongjc ~]# echo $(($a+$b))
3
#可以直接进行计算
[root@tongjc ~]# echo $((3+2))
5
[root@tongjc ~]# echo $((3/2))
1
  • (())
[root@tongjc ~]# a=5
[root@tongjc ~]# ((a=a+5))
[root@tongjc ~]# echo $a
10
  • $?

判断上一条命令是否成功 成功 ==0 ;;;如果不为0 都是失败的;;

[root@tongjc ~]# a=4;b=5
[root@tongjc ~]# ((a<b))
[root@tongjc ~]# echo $?
0
[root@tongjc ~]# ((a>b))
[root@tongjc ~]# echo $?
1

变量类型

  • 字符串 "string"
  • 布尔 true false
[root@tongjc ~]# true
[root@tongjc ~]# echo $?
0
[root@tongjc ~]# false
[root@tongjc ~]# echo $?
1

比较大小

eq 等于

ne 不等

ge 大于等于

gt 大于

le 小于等于

lt 小于

[root@tongjc ~]# [ 2 -eq 2 ];echo $?
0
[root@tongjc ~]# [ 2 -ne 3 ];echo $?
0
[root@tongjc ~]# [ 2 -le 3 ];echo $?
0
[root@tongjc ~]# [ 2 -lt 3 ];echo $?
0
[root@tongjc ~]# [ 4 -gt 3 ];echo $?
0
[root@tongjc ~]# [ 3 -ge 3 ];echo $?
0
  • 逻辑判断

    -a 与 相当于&&

[root@tongjc ~]# [ 4 -ge 3 -a 4 -lt 5 ];echo $?
0
-o 或 or
[root@tongjc ~]# [ 4 -ge 3 -o 7 -lt 5 ];echo $?
0
  • 数字
[root@tongjc ~]# a=1 
[root@tongjc ~]# echo $((a++))
1
[root@tongjc ~]# echo $((++a))
3   # 上面a++已经为2

小数运算

[root@tongjc ~]# echo $((2/3))
0
[root@tongjc ~]# awk ‘BEGIN{print 2/3}‘
0.666667

内置判断

-e 判断文件是否存在

[root@tongjc ~]# [ -e test ];echo $?
1
[root@tongjc ~]# [ -e soft ];echo $?
0

-d 判断是否子目录

-f 是否一个普通文件

-r 判断是否可读文件

-w 是否可写文件

-x 是否可执行文件

-s 是否非空文件

字符串操作片

  • : 切片
[root@tongjc ~]# s="hello from ttt"
[root@tongjc ~]# echo $s
hello from ttt
[root@tongjc ~]# echo ${s}
hello from ttt
[root@tongjc ~]# echo ${s:6}
from ttt
[root@tongjc ~]# echo ${s:6:3}
fro
  • 长度获取
[root@tongjc ~]# echo ${#s}
14
  • 掐头#
[root@tongjc ~]# echo ${s#hello}
from ttt
[root@tongjc ~]# echo ${s#*o}
#找到的第一个o,把他和之前的去掉
 from ttt
[root@tongjc ~]# echo ${s#*m}
ttt
  • 贪婪匹配##-掐头

会一直匹配到最后一个

[root@tongjc ~]# s="hello from testerhome"
[root@tongjc ~]# echo ${s#*m}
testerhome
[root@tongjc ~]# echo ${s##*m}
e
[root@tongjc ~]# ^C
[root@tongjc ~]# s="hello from testerhome meew"
[root@tongjc ~]# echo ${s###*m}
hello from testerhome meew
[root@tongjc ~]# echo ${s##*m}
eew
#作为一个整体,引号引起来
[root@tongjc ~]# echo "${s##*m}"
eew
  • 去尾 %
[root@tongjc ~]# s="hello from testerhome meew"
[root@tongjc ~]# echo ${s%meew}
hello from testerhome
  • 贪婪去尾 %%
[root@tongjc ~]# s="hello from testerhome meew"
[root@tongjc ~]# echo ${s%%o*}
# *是通配
hell
  • 替换内容
[root@tongjc ~]# echo ${s/tester/tongjc}
hello from tongjchome meew

参数传递

  • $0 代表当前执行文件
  • $1 代表第一个参数位置
#!/bin/bash
echo "获取脚本执行的参数:$0"
echo "获取第一个参数:$1"
echo "获取第二个参数:$2"
echo "获取参数的个数:$#"
echo "获取到的参数(str):$*"
echo "获取到的参数(每一个参数都是一个str):$@"
echo "获取当前进程的ID(PID):$$"

结果

[root@tongjc home]# sh test1.sh hh ss hah
获取脚本执行的参数:test1.sh
获取第一个参数:hh
获取第二个参数:ss
获取参数的个数:3
获取到的参数(str):hh ss hah
获取到的参数(每一个参数都是一个str):hh ss hah
获取当前进程的ID(PID):2091
  • $* 和 $@的区别
#!/bin/bash
for i in "$*";do
        echo $i
done

echo "---------------"

for i in "$@";do
        echo $i
done

结果:

aa ss dd ww cc
---------------
aa
ss
dd
ww
cc

例子说明$* 代表一个整体(传入是一个整体) $@ 代表多个

  • 如果传入 ./test.sh ‘1 2 3 4‘ 那就都是输出1 2 3 4

for循环

for (());do
循环体
done
[root@tongjc ~]# for ((i=1;i<10;i++));do echo ${i};done
1
2
3
4
5
6
7
8
9
  • 循环数组
[root@tongjc ~]# for i in ${a[@]};do echo ${i};done
182
3
4
5
6
9
  • 循环列表也行
[root@tongjc ~]# for i in `ls`;do echo ${i};done
anaconda-ks.cfg
apache-tomcat-8.5.54.tar.gz
home
soft

if语句

if [ -n ];   #-n表示非空
then ...;
else ...;
fi

命令行中

[root@tongjc ~]# if [ -e test ];then echo exist;else echo not exist;fi
not exist

sh中

#!/bin/bash
if [ test "$1" -eq "$2" ];
then echo "相等";
else
echo "不等";
fi
  • && ||
[root@tongjc ~]# [ -e test ]&&echo exist || echo not exist
not exist
[root@tongjc ~]# [ -e soft ]&&echo exist || echo not exist
exist

while循环

while 条件 
do 
    循环体
done
[root@tongjc home]# while [ $int -le 5 ];do echo $int;((int=int+1));done
1
2
3
4
5
#!/bin/bash
int=1
while(($int<=5))
do
        echo $int
        let "int++"  自增
done

将1中的内容重定向到循环体

[root@tongjc home]# while read x;do echo $x;done < 1
a
b
c
d
e
f
  • read 读 读文件 读输入内容
[root@tongjc home]# read -p "enter:" a;echo $a
enter:sss
sss

退出控制

  • return
  • break
[root@tongjc home]# echo *
1 aa.txt bb.txt test test1.sh test2.sh test3.sh test4.sh test5.sh test6.sh test.json test.sh tjc.sh
[root@tongjc home]# for i in *;do echo ${i};if [ -f $i ];then break;fi;done
1
[root@tongjc home]# for i in *;do echo ${i};if [ -d $i ];then break;fi;done
1
aa.txt
bb.txt
test
  • break 2 退出两层循环
  • continue
[root@tongjc home]# for i in *;do if [ -d $i ];then echo $i is dir;else continue; fi;done
test is dir
[root@tongjc home]# for i in *;do if [ -f $i ];then echo $i is dir;else continue; fi;done
1 is dir
aa.txt is dir
bb.txt is dir
test1.sh is dir
test2.sh is dir
test3.sh is dir
test4.sh is dir
test5.sh is dir
test6.sh is dir
test.json is dir
test.sh is dir
tjc.sh is dir
[root@tongjc home]# 
  • continue 2 跳到上层循环的下次循环中

开启一个python WEB服务

python -m CGIHTTPServer

通过访问192.168.198.102:8000 可以访问到我虚拟机的web服务。 192.168.198.102:8000/hh.html 可以访问到页面

  • 查询公网 ip
[root@tongjc ~]# curl icanhazip.com
182.150.30.52

脚本

  • 函数
#!/bin/bash

gotest(){
        echo "this is a test function"
        read -p "var_1: " var_1
        read -p "var_2: " var_2
        if [ $var_1 -eq $var_2 ]
        then 
                echo "var_1 == var_2"
        elif [ $var_1 -lt $var_2 ]
        then 
                echo "var_1 < var_2"
        else
                echo "var_1 > var_2"
        fi
}
gotest
  • 传参 需要传10个及以上的参数时,参数引用需要${10}
functest() {
echo "获取脚本执行的参数:$0"
echo "获取第一个参数:$1"
echo "获取第二个参数:$2"
echo "获取参数的个数:$#"
echo "获取到的参数(str):$*"
echo "获取到的参数(每一个参数都是一个str):$@"
echo "获取当前进程的ID(PID):$$"
echo "获取第十个参数:$10"
echo "获取第十个参数:${10}"
echo "获取第十一个参数:${11}"
}

functest p 2 3 4 5 a b c d e f g h
#结果
获取脚本执行的参数:./test1.sh
获取第一个参数:p
获取第二个参数:2
获取参数的个数:13
获取到的参数(str):p 2 3 4 5 a b c d e f g h
获取到的参数(每一个参数都是一个str):p 2 3 4 5 a b c d e f g h
获取当前进程的ID(PID):4670
获取第十个参数:p0
获取第十个参数:e
获取第十一个参数:f
  • 用户无限输入 直到输入quit
while true
do
        read -p "input:" input_v
        if [ "quit" == ${input_v} ]
        then
                break
        else

                echo ${input}
        fi
done
  • 当在awk中引用外部变量时,需要"$a"
read -p "input" a
read -p "input" b
echo $(($a+$b))
echo $(($a*$b))
echo $(($a-$b))
echo $(($a/$b))
echo `awk "BEGIN{print \"$a\"/\"$b\"}"`

性能相关

  • cat /proc/cpuinfo cpu信息
  • free -m 内存监控 单位m top的单位是kb
[root@tongjc home]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1495          84        1317           8          92        1287
Swap:           819           0         819
  • df -h 查看硬盘

 

Linux-bash复习

上一篇:linux中使用Jmeter压测总结


下一篇:反弹shell的各种基础姿势