bash复习

一、变量定义 (大小写敏感区分)

a=1 //等号两端不能有空格

向屏幕输出echo

echo $a //$a 引用变量a

字符串中引用变量,需要用双引号

echo "chen $a"

最严谨的写法,引用变量用{}

echo ${a}_1 //会引起歧义时使用{}

二、预定义变量 (Linux系统预先定义的变量)

pwd //返回当前目录

echo $PWD // PWD=`pwd`

三、数组变量

定义数组

a=(1 2 3 4 5)

输出数组:可以按索引下标输出单个元素,也可以切片

echo ${a[*]} //echo ${a[@]} 效果相同

输出数组的长度

echo ${#a[*]}

which命令,查找某个程序的安装位置(只能查找加到环境变量中的)

which python

touch创建一个文件(默认当前目录)

touch 1.sh

反引号,把命令执行的返回值赋给变量

a=`ls`

a=(`ls`) //返回值形成数组

变量运算

a=2;b=3

echo $((a+b))

echo $(($a+$b))

echo $((a*5))

a=5

((a=a+5))

echo $a //a=10

可以自增,或自减

((a++));echo $a

除法:shell不支持浮点型运算,可以用以下方法

awk 'BEGIN{print 2/3}'

四、变量类型

字符串 a="xx"

数字 i=1323

布尔 a=true b=false

上一条命令的执行结果,输出0,时true,其它都是false

a=2;b=4

((a<b))

echo $?

五、字符串操作

s="hello from testerhome"

切片

echo ${s:6}

echo ${s:6:4}

获取长度

echo ${#s}

掐头

echo ${s#hello}

echo ${s#*o}

//echo "${s#*o}" 这两个时不同的,后面这个第一个空格也会输出,双引号作为整体匹配

-贪婪匹配

echo "${s##*m}"

去尾

echo ${s%home}

echo ${s%h*}

echo ${s%%o*}

替换

echo ${s/hello/welcome}

ls Videos 可以查看文件,或目录

[ 2 -eq 2 ];echo $? 相等

[ 2 -ne 3 ] 不等

[ 3 -gt 1 ] 大于

[ 3 -ge 3 ] 大于等于

[ 2 -lt 4 ] 小于

[ 2 -le 2 ] 小于等于

[ 2 -ge 1 -a 3 -lt 2] // -a等同于&&,逻辑 “与”,false

[ 2 -ge 1 -o 3 -lt 2] // -o等同于|| ,逻辑“或”,true

逻辑“非”?

六、内置判断

-e file 如果文件存在,则结果为真

-r file 如果文件可读,则结果为真

七、逻辑控制

结构体都有固定的格式

1. if结构

if [ -e demo.yml ];then echo exist;else echo not exist;fi

echo "1" && echo "2" || echo "3" && echo "4" || echo "5" || echo "6" && echo "7" && echo "8" ||echo "9" //1 2 4 7 8 ; 前面以执行完成的结果,看成一个整体

Ctrl+R 和 history的使用,查看之前输入的命令

2.for循环:用于递归数组,还可以递归以空格隔开的字符串序列。或者某个命令的返回值

for ((i=0;i<10;i++));do echo $i;done

array=(2 4 5 6 7 8)

for ((i=0;i<${#array[*]};i++));do echo $i;done

for x in ${array[@]}; do echo $x;done //遍历数组并输出

for x in `ls`; do echo $x;done //使用灵活

s=(aa bb cc "sss dd");for x in ${s[@]};do echo $x;done

//数组变量的引用,一定要用${s[@]}引用整个数组

3.while循环

i=0;while [ $i -lt 3 ];do echo $i;((i=i+1));done

一行行读取文件内容

while read line;do echo $line;done < /tmp/tmp

cat file //查看文件

vim file //创建新文件,并打开文件,可编辑保存

read -p "enter:" a;echo $a

4.退出控制

for f in *;do echo $f;if [ -d $f ];then break;fi;done //break,跳出循环

for f in *;do echo $f;if [ -f $f ];then echo $f is file;else continue;fi;done

//continue,不满足条件,跳出当前循环,进行下一次循环

八、shell运行环境概念

1.bash是一个进程

-bash下还可以再重新启动一个shell,这个shell是sub shell,原shell会复制自身给他

-在sub shell中定义的变量,会随着sub shell的消亡而消失

2.()子shell中运行

3. {} 当前shell中运行

4. $$ 当前脚本执行的pid

5. & 后台执行

6. $! 运行在后台的最后一个作业的pid

 

学习的是为了更快、更好的解决问题,不要让学习本身成为问题!
原文地址:https://www.cnblogs.com/testerhome-yizhou2018/p/10124204.html