一、变量定义 (大小写敏感区分)
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