shell 脚本学习
shell 脚本在linux上可以说是非常有用的一个工具,它就是linux命令的一个集合,所以写好shell脚本的关键一部分就是对linux命令比较熟悉。
本博客是在图书馆借阅shell相关脚本学习书记做的一个简单笔记。
shell 脚本的创建与执行
一般我们在linux中创建的shell脚本都是以.sh为结尾的,这其实不是说一定要用sh结尾才行,只是大家约定习俗的一个习惯而已。
在shell文件的第一行,通常是#!/bin/bash,表示该脚本使用bash语法。#是shell脚本中的注释。通常自定义的脚本我通常习惯放在/usr/local/bin目录下,关于bin,sbin,/usr/bin,/usr/local/bin等的区别
现在我们创建第一个脚本first.sh:
1 | !/bin/bash |
脚本创建好之后有两种运行方式:
- 使用bash执行:
bash first.sh - 直接执行:先让first.sh变成可执行脚本
chmod +x first.sh,然后再直接运行./first.sh
脚本运行过程中可以使用bash -x first.sh,这样可以看到脚本的执行过程。
shell 脚本的变量
脚本预定义变量
shell 预先设置的几个变量值,比如optin.sh:
1 | !/bin/bash |
如果执行:./option.sh 1 2,输出为:option.sh 1 2
也就是执行脚本的时候后面的参数有几个,在脚本中直接使用$位置就可以使用这些变量值,0位置是脚本的名称。
自定义变量
在脚本中自己定义的变量,变量名=变量值,在脚本中使用的方式为$变量名。
1 | !/bin/bash |
num=1 中num和=之间不要有空格,不要有空格,不要有空格。
控制台变量值传递
控制台交互性,读取控制台输入的数,然后传递给脚本中,如:
1 | !/bin/bash |
数值运算
简单的加减乘除的运算,使用[]前面需要加上$,如:
1 | !/bin/bash |
if-else 条件逻辑语句
对于if-else大家在任何一门语言中都是必备的,shell中的if-else格式如下:
常用的数值判断
if-else常用的根据数字来判断的相关实例:
1 | 单独if语句 |
如:
1 | !/bin/bash |
执行的时候:./if.sh 89。
数值大小的判断除了有(())之外,还可以使用[],如果使用[],那么就不能使用> , < , =这些符号,要使用:
小于:-lt,大于:-gt,小于或等于:-le,大于或等于:-ge,等于:-eq,不等于:-ne,如:
1 | !/bin/bash |
if中常用的跟文档相关的判断
if 语句中可以使用一些内置的跟文件判断相关的参数。
1 | !/bin/bash |
case 逻辑判断
java中有if之外还有switch,shell中除了if之外还有case,如果总结一下啊,可以发现if中的结束用fi,case中结束用esac,刚好是倒过来的。
1 | case语句,value可以任意个,*指代其它值。类似java switch default |
实例脚本,判断奇偶数字:
1 | !/bin/bash |
之前跟同事学的一个很有用的基础脚本:地址
shell中的循环:for,while
常用到的循环就是for和while了,
for的使用方式:
1 | !/bin/bash |
while 的使用方式:
1 | !/bin/bash |
while 中如果是while :; do那么就是死循环了,有些地方可以这样使用。
shell 函数
shell的函数一定要在被调用之前声明,生命函数的关键字是function,函数的参数个数需要在调用的时候指定,如func.sh:
1 | !/bin/bash |
调用的方式./func.sh 1 2 3 输出结果为:
可以看到第一个函数里面的$1 $2 $3跟shell脚本预设的变量是不相关的,函数里面能用的参数都是sum传递进去的。
ps: 如果每次写完脚本都需要使用
chmod +x xxx.sh这样也挺烦的,不如写个脚本吧,x.sh。
1 | chmod +x *.sh |
这样就可以使用./x.sh,直接执行脚本就好了。