1. shell脚本
通过一系列程序语句帮我完成重复工作
2. 脚本的文件头最好记录好如下内容:
(1) 功能 (2)版本信息 (3)作者与联系方式 (4) 版权声明方式 (5) 历史记录 (6) 特殊命令用 绝对路径 执行 (7) 运行时需要的环境变量预先声明与设置
3.学习
$( (计算式) ) 可以进行整数计算
bc : 计算小数点可以用bc
echo "1.1 *5 " | bc
bash和source: 我们执行命令一般用的是
bash test.sh
或者
sh test.sh
但是bash或者sh执行命令都是启动一个新的子进程来进行操作,如果我们想在父进程中执行命令的话,需要执行source
source test.sh
这样test.sh中定义的变量就会在父进程中生效.
test: 测试某个命令是否存在 test -e [filename] test有很多选项,可以判断文件字符串,权限等,详情 --help
[]:我们可以使用中括号来达到和test相同的效果,比如:
[ -z "${HOME}" ]; $?
如果 ${HOME} 不存在,会输出1,存在会输出 0.还可以比较字符串,比如:
[ "123" == "123" ]
我们也可以通过 $? 判断结果,需要注意的是前后都需要空格,双等号前后也需要.
参数最好也要用双引号括起来,否则会报错比如:
name="li li" [ ${name} == "li li" ]
把${name}用双引号括起来就可以,"${name}",不括起来的话就会比较 li li == "li li" 有多个参数.
shell的默认变量:
$# 参数个数
$@所有变量
$* 同$@ 用空格分割
$1 第一个参数
$2 第二个参数以此类推
shift:变量偏移可以把变量起始位置向后偏移,也就是删除了第一个变量
if:语法
if [ "${name}" == "hello" ] echo "Yes" elif [ "${name}" == "world" ] echo "Yes world" else echo "NO" fi
基本语法就这,和其他语言差不多
netstat -tuln:查看启动的服务 127.0.0.1只对本机开放,如果是0.0.0.0则对所有网络开放
case语法:
case $变量名称 in "ONE") echo "ONE" ;; "TWO") echo "TWO" ;; *) echo "Default" ;; esac
其实和switch差不多,没什么好说的
function:函数
function printHello(){ echo "Hello" } printHello
可以定义函数, 也可以在函数后面加参数,用$1接收,这时候的$1指的是函数的参数,不是脚本的参数
循环:
不定循环:
while [condition] do 程序 done #当条件满足一直循环 until [condition] do 程序 done #当条件满足终止循环
固定循环:
for var in con1 con2... do 程序 done
还可以用类似于java中的for循环来处理
for (( i=1; i<=5; i=i+1 )) do echo "Hello" done
seq: 比如 seq 1 100 输出1到100连续的数字
sh可以在执行脚本前进行校验 sh -n hello.sh 加上-n参数就可以,其实vim就有校验功能,其实都差不多。 -v 执行脚本前先输出脚本内容,-x执行过程显示到屏幕上