OK,今天我终于来学脚本啦,之前都是半途而废了,现在希望能够坚持记笔记学下去哈哈哈~
好的,废话不多说,我开始啦!
一、关于shell
shell是壳的意思,顾名思义是套的操作系统外面的壳,由于不能直接操作内核,用shell来调用操作系统完成一些命令。
新建文件用.sh结尾
vim helloworld.sh
#! /bin/bash
echo 'hello world'
【第一行】固定套路,表示这是一个脚本文件
【第二行】输出一个字符串
赋予这个文件执行权限
chmod ug+x helloworld.sh
- 当这个文件有执行权限,就可以使用绝对路径或者./helloworld来执行脚本。
执行流程bash ->./sh->脚本中的命令
当然,如果没有执行权限可以
- sh helloworld.sh
bash-> sh helloworld.sh->脚本中的命令
- source helloworld.sh
执行流程bash->脚本中的命令
由于前两种方法新开了一个进程来执行命令,所以两个进程间的变量可能不能共享,导致脚本中没有办法访问bash进程中的变量。
所以这时候需要export 。也就是说在bash中定义变量是用export age = 18
export的作用是首先从当前进程查询变量,如果当前进程没有,默认去父进程查询变量。也就是说如果用export,这个变量对子进程是可见的,不加的话变量对子进程是不可见的。
二、shell语法
当你学会一门语言,其他语言就简单了。
变量:标识符、数据类型
运算符:让多个变量产生关系。算术、关系、逻辑、位、三目
逻辑语句:顺序、分支、循环
方法/函数:将实现某一功能的代码封装到一起
世界观:构建一个语言的世界观。万物皆对象???
应用:多线程、网络
框架:web服务
中间件/组件:缓存、负载均衡
##shell变量
- 命名:字母数字下划线,不能数字开头
- 类型
- 局部变量
- 环境变量
- shell变量
只读变量也不能删除,是弱类型语言
shell字符串
- 不使用引号
str1=zhangsan
echo $str1
- 使用双引号
str2="zhang san"
echo $str2
- 拼接字符串
str3="$str2 444"
echo $str3
输出:zhang san 444
str4='$str2 444'
echo $str4
输出:$str2 444
双引号中的变量取变量值,单引号中的变量会原样输出
输出字符串的长度
echo ${#str4}
输出的是str4的长度:9
截取字符串
echo ${str1:2:3}
输出:ang
表示从下边为2的往后截取3个字符
shell数组
支持一维数组,不支持多维数组。从0开始编号。
定义数组
使用花括号,用空格分隔。
读取数组元素
使用数组名[下标]
使用@可以读取所有元素
favs={"red" "blue" "yellow" "orange"}
fav=${favs[1]}
echo ${fav[@]}
length1=${#favs[@]}
length2=${#favs[*]}
shell注释
单行注释:使用#
多行注释:
:<<EOF
内容
EOF
:<<!
内容
!
shell运算符
算术运算符
a=10
b=20
val1 = `expr $a+$b`
val2 = `expr $a-$b`
val3 = `expr $a \* $b`
val4 = `expr $a / $b`
if [$a ==$b]
then
echo "a等于b"
fi
if [$a !=$b]
then
echo "a不等于b"
fi
关系运算符
只支持数字,不支持字符串,除非字符串的值是数字
#! /bin/bash
a=10
b=20
if [$a -eq $b]
then
echo "a=b"
else
echo "a!=b"
fi
if [$a -ne $b]
then
echo "a!=b"
else
echo "a=b"
fi
#$a -gt $b a>b
#$a -lt $b a<b
#$a -ge $b a>=b
#$a -le $b a<=b
布尔运算符
if [$a !=$b]
then
echo "$a !=$b"
fi
if [$a -lt 100 -a $b -gt 15]
then
echo "$a小于100且 $b 大于15"
fi
if [$a -lt 100 -o $b -gt 15]
then
echo "$a小于100或 $b 大于15"
fi
逻辑运算符
if [[$a -lt 100 && $b -gt 100]]
then
echo "返回true"
else
echo "返回false"
fi
if [[$a -lt 100 || $b -gt 100]]
then
echo "返回true"
else
echo "返回false"
fi
字符串运算符
if [$a = $b]
if [$a !=$b]
if [-z $a ] #字符串长度为0
if [-n $a] #字符串长度不为0
if [ $a ] 字符串不为空
文件测试运算符
if [ -r $file] #文件可读
if [-w $file] # 文件可写
if [-x $file] #文件可执行
if [-f $file] #是不是一个文件
if [-d $file] #是不是个目录
if [-s $file] #文件不为空
if [-e $file] #文件存在
好啦~今天就先学到这里啦!知识点都挺简单的,就是太零碎了,需要多去运用。欢迎大家有问题留言讨论!