一、Shell基础
1.1 Shell概述
Shell是一个命令行解释器,介于内核和程序之间。(硬件>内核>Shell命令解释器>外层应用程序);
Shell是解释执行的脚本语言,主要分为B shell和C shell,现主要用的是B shell。
1.2 Shell第一个脚本
vi hello.sh '''''' #!/bin/bash echo "hello world" '''''' chmod 755 hello.sh ./hello.sh
1.3 Bash基本功能
#1 历史命令 history !! #重复执行上次的命令 !111 #重复执行历史中第111条命令 !vi #重复执行历史中最后一条以vi开头的命令 #2 命令别名 alias ll='ls -l'
- bash快捷键
- 输入输出重定向:
- 多命令输入和管道符
-
用法:./configure && make && make install
ls /root/test && echo yes || echo no
管道符:命令1的正确输出作为命令2的操作对象
通配符
1.4 Bash变量:自定义变量、环境变量、位置参数变量、预定义变量
#1 环境变量 export <变量名=值> #设置变量 env #查询变量 unset <变量名> #删除变量 #PATH:系统查找命令的路径 echo $PATH PATH="$PATH":/root/sh #PATH变量叠加的方式来临时设置环境变量
# 接收键盘输入 read [选项] [变量名]
# 选项:-p "提示信息",-n 字符数:只接受指定的字符数后就自动执行了 # 演示位置参数 vi test.sh '''''' #!/bin/bash read -p "Input your age: " age echo "$1 age is ${age}" ''''''
chmod 755 test.sh
./test.sh liming
[root@localhost ~]# ls anaconda-ks.cfg test.txt [root@localhost ~]# echo $? #0表示上次命令执行正确 0 [root@localhost ~]# lss -bash: lss: 未找到命令 [root@localhost ~]# echo $? 127
- 变量运算:推荐用“$((运算式))”或“$[运算式]”
- 运算符:
1.5 环境变量配置文件
#系统默认环境变量配置文件有: #所有用户生效 /etc/profile /etc/profile.d/*.sh /etc/bashrc #对应用户生效 ~/.bash_profile ~/.bashrc
source <配置文件> #使配置文件生效
. 配置文件 #同上
set #查询系统默认变量
二、Shell编程
2.1 正则和通配符
- 正则是在文件中匹配符合条件的字符串,是包含匹配(grepawksed支持正则),类似python中re.search用法;
- 通配符是匹配符合条件的文件名,是完全匹配(lsfindcp不支持正则,只能使用通配符进行匹配),类似python中re.march用法
2.2 字符截取命令
#1 cut <文件名> # 选项: -f 列号:提取第几列;-d 分隔符:按照指定分隔符分割符(默认为制表符) cut -f 2 test.txt cut -f 2,4 test.txt cut -d ":" -f 3 /etc/passwd #cut的短板:不能很好识别以空格分隔的内容,这种更适合用awk命令 #插入一个命令:printf '输出类型 输出格式' <输出内容> # 输出类型: %ns:输出n个字符; %ni:输出n个整数; %m.nf:浮点数 # 一般awk配合printf使用 #2 awk '条件1 {动作1} 条件2 {动作2}' <文件名> awk '{FS=":"} {print $1 " " $3}' /etc/passwd # {FS=":"}指定分隔符; 第一行没有分割 awk 'BEGIN{FS=":"} {print $1 " " $3}' /etc/passwd #BEGIN分割第一行 #3 sed [选项] '动作' <文件名> #用来对数据选取、替换、删除、新增等操作 # 选项: -n:只输出处理行; -e:允许输入数据应用多条SED命令; -i:直接修改数据文件 # 动作: a追加,c行替换,i插入,d删除,p打印,s字符替换 df -h | sed -n '2p' #只查看第二行