脚本编写
编写hello.sh文件,通过chmod ug+x增加权限,直接可以执行
执行的三种模式
- 输入脚本文件的绝对路径或者相对路径./**.sh(必须是可执行文件)或者/home /*.sh
- sh 命令 sh hello.sh,用来判断是不是.sh文件(和绝对路径一样都是重新打开一个新的进程去打开文件)
- source hello.sh 直接在bash进程执行(原因是进程间的数据是互通的)
export 变量引用顺序:从当前进程查询变量,如果当前进程没有这个变量默认去父进程查询这个变量。如果用export修饰变量,那么这个变量对于子进程就是可见的
export age=18
---
#!/bin/bash
echo $age
shell变量
变量类型:
- 局部变量:局部变量在脚本或命令中定义,尽在当前shell实例中有效,其它shell启动的程序不能访问
- 环境变量:==全局变量
- Shell变量:由shell程序设置的特殊变量,shell变量中有一部分是环境变量,有一部分是局部变量
#变量的声明
name = "zhang"
for file in 'ls/etc'
#变量的调用
echo $name
#只读变量
url = "http://www.geogle.com"
readonly url
#删除变量
unset name
shell字符串
字符串可以用单引号,也可以用双引号,也可以不用
单引号
- 单引号会原样输出,字符串中变量无效
双引号 - 双引号可以由变量
- 双引号可以出现转义字符
#声明字符串
str1="hello"
str2='hello'
#字符串拼接--双引号
name='111'
name1="hello,"$name""
#字符串拼接--单引号
name='111'
name1='hello,'$name''#可以转义
name2='hello,${name}'
echo name2='hello,'$name''#不转义
#字符串长度
name='111'
echo ${#email}#‘#’代表长度
echo ${name:1:4}#从1到4输出
shell数组
- bash不支持多维数组,并且没有限定数组的大小
- 下标由0开始
#定义数组 括号表示数组,数组中元素用空格
数值={值1 值2 值3}
fv={"shenme" "gui"}
#读取数组
fv2=${fv[1]}
#@符号获取所有值
echo=${fv[@]}
#数组的长度
len=${#fv[1]}#得到是数组的值长度
len=${#fv[@]}#数组长度
多行注释
:<<!
…
…
!
运算符模式
val='expr $a+$b'
if[$a -eq $b]
then
echo "$a - $b :a 等于 b"
else
-ne#不等
-gt#大于
-lt#小于
-ge#大于等于
-le#小于等于
!=
-a与
-o或
| 非
&&短路与,前面错后面不执行
||短路或,前面错后面不执行
if[-z $a]#判断字符串长度,-n相反
then
echo"-z $a :字符串长度为0"
else
...
if[ &a ]#是不是为空
#文件操作运算符
Shell控制流程
if condition
then
command1
elif
then
command12
else
command
fi
###case
case 值 in
模式1)
command
;;==break
模式2)
command
;;
esac
#for
for car in item1 item2 item3
do
command
done
###while
while condition
do
command
done
###shell函数
fun(){
read num
return $(($num))
}
fun 1 2 3 4#传参 --类似 $ll /etc/...
括号
双小括号(( )) :整数比较、四则运算