shell基础课程
bash语言
变量
变量定义使用
a=1 <变量不能有空格>
echo $a ——输出到屏幕
a='hello world' ——中间加空格需打引号
a="avf $a" ——在字符串引入变量使用双引号
echo ${a}_1 ——打印变量a和_1
echo(向屏幕输出)
echo $不存在的变量打印什么都不会发生
预定义变量
echo $PWD <和pwd一样>
echo $USER
echo $HOME
echo $PATH
数组变量
a=(1 2 3 4 5)
echo $a >>输出索引0
echo ${a[索引值]} >>@*会输出所有的数组值
echo ${#a[@]} >>会输出长度
a=`ls` >>反引号
echo $a >>执行反引号里面的命令
a=(`ls`)
echo $a >>返回第一个值
-
which 》》寻找文件位置,只能加载环境变量
特殊符号
- 双引号用于括起一段字符串值,,支持$var形式变量替换
- 单引号也表示其内容是字符串值,不支持转义
- \反斜杠,某些情况下表示转义
- $(ls)表示执行ls后的结果,与``类似,不过可以嵌套
- `反引号,用法比较独特,代表命令的输出
- $(())对变量进行操作,比如相加$((a+b)) $((2+3))
- (())是整数扩展,把里面的变量当做整数去处理
- ((1..10))等价于seq 1 10,表示1到10
数字变量
echo $? 》》看上一条语句执行是否成功
浮点数运算:awk 'BEGIN{print 2/3}'
字符串操作
s='hello wo de di yi ge'
echo ${s:6:8} 》从第6位输出,在数8个
echo ${#s} 》获取长度
掐头:
echo ${s#hello} 》去除掉hello
echo ${s#*l} 》匹配到l就去除掉前面的内容,在加一个#贪婪匹配,会去除掉有l的内容
去尾:
echo ${s%ge} 》去除ge
echo ${s/de/pa} 》de换成pa
算术判断
[ 2 -eq 2 ]相等
[ 2 -ne 2 ]不等
[ 3 -gt 1 ]大于
[ 3 -ge 3 ]大于等于
[ 3 -lt 4 ]小于
[ 3 -le 3 ]小于等于
内置判断
[ -e file ];echo $? >如果文件存在,就为真
[ -d file ] >如果文件是一个子目录
[ -f file ] >如果文件是一个普通文件
[ -r file ] >如果文件可读
[ -s file ] >如果文件的长度不为0
[ -w file ] >如果文件可写
[ -x file ] >如果文件可执行
逻辑环境
条件if
if [condtion]; then..;else...;fi
简单的逻辑可以使用$$(与,前面条件为true执行) ||(或)去代替
条件可以用命令返回
if [ -e 1.shs ];then echo true;else echo falsh;fi
判断文件是否存在,存在打印true,否则打印falsh
for循环
for((c1;c2;c3));
do
....
done
实例:
while循环
i=0;while [ $i -lt 3];do echo $i;((i=i+1));done
实例:
shell环境
shell运行环境概念
bash是一个进程
- bash下还可以在重新启动一个shell,这个shell是sub shell,源shell会复制自身给他
- 在sub shell里定义的变量,会随着sub shell的消亡而消失
()子shell中运行
[]当前shell中执行
$$ 当前脚本执行的pid
&后台运行
$!运行在后台的最后一个作业的PID(进程id)
ps
ps -e
ps -ef >所有进程
sleep 10& >后台运行
jobs 》查看运行进程
创建文件并执行文件
chmod +x 文件名称 --执行权限
bash 文件名 ——执行文件
加到环境变量
cd ~
ls -al
vim .bash_profile
最后一行加上路径
export PATH=$PATH:/home/jiange
完成后退出文件
source ~/.bash_profile
直接运行文件即可
grep简单应用
grep 'hello' 1.txt >查找hello在1.txt
grep -i 'hello' 1.txt >忽略大小写
grep -io 'hello' 1.txt >只显示hello
cat 1.txt | grep 'hello' >显示1.txt里面包含hello