太久不用Shell了,已经快忘光了。最近实习很累,今晚有空整合学习以下。
编写和使用Shell
创建.sh
文件,第一行:
!#/bin/bash
表示这个文件的默认解释器是bash,这个具体的bash目录可以用which命令查看一下。当然也可以使用bash 文件名
的方式解释执行这个文件。
如果想直接运行Shell脚本,可以使用:
chmod +x 文件名
的方式给其赋予执行权限,然后使用绝对或相对路径来直接执行它。
变量
Vim没法打中文,只好写英文注释。坚持用Vim写Shell,这样到真实的生产环境中也会受益吧。
#!/bin/bash
# use variable
a="lzh"
echo $a
echo ${a} # {} can help interceptor to identify the boundary
# make the variable read only
b="sb"
readonly b
# use statement as variable
for i in `dir`; do # or use $(...) replace `...`
echo -e ${i} "\c" # -e to open escape,\c to not wrap
done
echo ""
# delete variable
c=100
unset c
echo "c="${c}
运行结果:
lzh
lzh
apache-tomcat-8.5.29 hpl-2.1 MyEclipse 模板 文档 桌面 eclipse jdk1.8.0_161 Workspaces 视频 下载 eclipse-workspace lzh.sh 公共的 图片 音乐
c=
字符串
#!/bin/bash
# distinguish ' and "
sb="lzh"
a='66\"6 ${sb}' # original shape
b="66\"6 ${sb}" # both escape and use variable are allowed
echo a=${a}
echo b=${b}
# joint
a="sb"
b="Lzh"
c="${a}${b}"
echo ${c}
# length
echo ${#c}
# sub string
echo ${c:1:3}
# find index(find char b or z)
echo `expr index "${c}" bz`
运行结果:
a=66\"6 ${sb}
b=66"6 lzh
sbLzh
5
bLz
2
数组
#!/bin/bash
# use space or wrap sign separated
a=("lzh" "is" "sb")
b=(
"yes"
${a}
250
)
# use @ get all elements
for i in ${a[@]}; do
echo -e ${i} '\c'
done
echo ''
# array is array[0]
echo ${a} = ${a[0]}
# so
for i in ${b[@]}; do
echo -e ${i} '\c'
done
echo ''
# length
echo ${#b[@]} = ${#b[*]}
运行结果:
lzh is sb
lzh = lzh
yes lzh 250
3 = 3