shell 脚本的学习

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执行过程显示到屏幕上

原文地址:https://www.cnblogs.com/lishuaiqi/p/15120511.html