文章目录
- 变量
 - 分支
 - 循环
 - 函数
 - 函数案例
 
变量
- 普通变量 
  
- 声明变量,直接赋值,同python
 - =两边
不能有空格 - ‘’ 单引号表示纯字符
 - “”双引号表示一个整体
 - ``反引号表示操作命令
 - 末尾没有;号
 
 
# 直接赋值,
name='jack'  # 纯字符
pyCode='import os\nimport csv\n xxxx'
# -e 识别转义字符,输出到文件中
echo -e $pyCode > content.txt  # $符引用变量的值
state="name is jack, current dir $(pwd)" # 必须带括号
echo -e $state >> content.txt    
 
- 环境变量 
  
- 配置环境变量,以使linux操作系统可以使用。
 当前用户下的环境变量
 
# 编辑文件
vim  ~/.bashrc
# 配置环境变量
export PATH=$PATH:/home/xxx/py
export LD_LIBRARY_PATH=XXXX
# 保存后,使用变量生效
source ~/.bashrc
 
全局的环境变量
# edit
vim /etc/profile
# config
export PATH=$PATH:/home/xxx/py
# enable
source /etc/profile
 
- 命令行变量 
  
- shell 脚本命令行
 - 函数的参数
 
 
# 执行shell脚本,传参
$ sh laufing.sh param1 param2
# 脚本中使用$1  $2 ....$9..${10}
# 获取参数个数 $#
# 获取所有的参数 $* / $@
# $?上一条指令的执行结果 0表示成功
# 定义函数 类js
function func(){
	echo $1
	echo $2
}
# 执行函数
func param1 param2
 
分支
- test xxx,表示测试条件,成功返回true
 - 数值比较 
  
- -eq 等于
 - -gt 大于
 - -lt 小于
 - -ge 大于等于
 - -le 小于等于
 
 - 字符串比较 
  
- = 相同
 - != 不同
 - -z 长度为0
 
 - 文化目录的判断 
  
- -e 文件或者目录是否存在
 - -f 存在且为文件
 - -d 存在且为目录
 - -r 文件存在且可读
 - -w 文件存在且可写
 - -x 可执行
 
 
# test判断语句
if test 5 -gt 3;then
	echo "true"
fi # 结束
 
# [] 也表示测试语句,必须有空格
if [ $1 = '' ];then
	echo "no params"
elif [ $1 = 'lauf' ] || [ $1 = 'tom' ];then
	echo "lauf or tom params"
else
	echo "other params"
fi
 
&& || 连接多个测试条件,
 ! 条件内部取反
循环
# 循环数组, 闭区间
for i in {1..5};do
	echo $i
done
# 变量目录下的文件
curDir=`ls $(pwd)` # 数组
for i in $curDir  # 引用数组
do
	echo $i
done
 
函数
shell定义数组特别简单,类似js。
function func1(){
	echo $1  # 打印第一个参数
}
# 函数调用,并传参
func1 "tom" 4
 
函数案例
递归实现每个目录下添加文件。
 
创建lauf.sh脚本
#!/bin/bash
function addFile(){
	if [ -d $1 ];then
		echo "add file for $1"
		touch "$1/lauf.txt"
		# recursive
		dealDir $(pwd)/$1
	fi
}
function dealDir(){ # need absolute path
    cd $1
	curFiles=`ls $1`
	for i in $curFiles;do
	    addFile $i
	done
}
# sh lauf.sh /home/laufing/aa
dealDir $1
 



















