shell脚本学习笔记

shell 脚本学习笔记

脚本格式

脚本以#!/bin/bash开头(指定解析器)

第一个shell脚本 hello world

创建以下文件 a.sh

#!/bin/bash
echo "hello world"

脚本的执行方式

bash 脚本文件 例如上面的文件,就使用bash a.sh
./脚本文件 例如上面的文件 就用 ./a.sh 如果没有权限的话,你需要赋予用户执行权限。 chmod +x 文件名

关于echo

后面第一个参数是 要打印的内容 后面要是跟 >> 文件名,就是把内容追加到文件后面。要是 > 文件名,就是把内容覆盖到文件里。

系统变量

查看shell中所有的变量

使用 set

自定义变量

基本语法 : 变量=值,不要加空格。 撤销变量 :unset 变量
声明静态变量: readonly 变量

变量的定义规则

  1. 变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
  2. 等号两侧不能有空格
  3. 在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
  4. 变量的值如果有空格,需要使用双引号或者单引号括起来。
  5. 使用变量的话,需要使用$变量名

特殊变量

$n 代表输入的第n个参数。10以上的话,需要用{}括起来。
$# 获取所有输入参数的个数。

$* 所有输入参数得一个整体

$@ 类似于$*但是会把所有参数区分开。
$? 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。

运算符

$((运算式))或者$[运算式]
expr 运算式 使用expr运算符间一定要有空格。
比如计算2+3,你可以用 $[2+3]你也可以用expr 2 + 3

条件判断

[ 判断式 ] 判断式前后的空格不能省。
= 是两个字符串作比较。

两个整数之间的比较

-lt 小于 -le 小于等于 -eq 等于 -gt 大于 -ge 大于等于 -ne 不等于

按照文件权限进行判断

-r 有读的权限 -w 有写的权限 -x 有执行的权限

按照文件类型进行判断

-f 文件存在并且是一个常规的文件 -e 文件存在 -d 文件存在并是一个目录

流程控制

if 判断

基本语法:

if[ 条件判断式 ]
then 
    要执行的语句
elif [ 条件判断式 ]
then 
    要执行的语句
else 
    要执行的语句
fi

举例如下:输入一个数字,如果是1,则输出🐂,如果是2,则输出🍺,如果是其它,什么也不输出。

#!/bin/bash
if [ $1 -eq "1" ]
then 
    echo 🐂
elif [$1 -eq "2"]
then 
    echo 🍺
fi

执行 ./a.sh 1 输出🐂

case语句

基本语法

case $变量名 in 
    "值1")
        执行语句
    ;;
    "值2")
        执行语句
    ;;
    *)
       默认执行语句
    ;;
esac

for 循环

基本语法:

for((初始值;循环控制条件;变量变化))
do
    执行语句
done

举例如下:从1加到100

#!/bin/bash
s=0
for((i=0;i<=100;i++))
do
    s=$[$s+$i]
done
echo $s

最后会打印出5050

高级for循环

for 变量 in 值1 值2 值3
do 
    执行语句
done

举例如下:打印所有输入参数

#!/bin/bash
for i in $*
do     
    echo $i
done

输入 ./a.sh 1 2 3 4 5 会把1 2 3 4 5都打印出来

while循环

基本语法:

while [ 条件判断式 ]
do 
    执行语句
done

举例如下:从1加到100

#!/bin/bash
s=0
i=1
while [ i -eq 100 ]
do 
    s=$[$s+$i]
    i=$[$i+1]
done
echo $s

读取输入数据

基本语法: read(选项)(参数)
选项:
-p: 指定读取值时的提示符
-t: 指定读取值时的等待时间
参数:
变量: 指定读取值时的变量名
举例如下:在7秒内,读取控制台输入的名称

read -t 7 -p "请输入你的尊姓大名" name 
echo name

自定义函数

function functionName()
{
    执行语句
}
#调用函数
functionName

函数的参数

直接写在后面就行,用写在括号里。用$1,$2等来调用。

函数的返回值

函数也有返回值,但是不是用来返回结果的,是用来返回执行的状态码的,可以通过,$?来获得返回值。而且有限制,最大就是255.

shell工具

cut

基本用法 cut [选项参数] filename
默认分隔字符是制表符。
选项参数说明:
-f 列号,表示分隔完的数据提取第几列
-d 分隔符 按照指定的分隔符分隔列
-c 指定具体的字符,取第几个字符

sed 对行进行处理

sed 'n[d或a参数]'
d代表删除该行。
a参数 代表在改行后面新起一行,然后写上参数内容。
n的意思是第几行。1,3表示1到3行。
这里也可以不用数字而使用正则表达式。在//之间写正则表达式用来筛选行

如果是查找替换的话,就比较麻烦一点,这样子。
sed '1,3s/gaolei/niubi/g' 把1到3行所有的gaolei替换成niubi,最后的g代表全局替换
sed 还有两个参数
-e 后面跟指令,多条指令的话,就 -e 指令1 -e 指令2
-i 直接编辑文件 , 如果sed处理的是文件的内容的话,就用 sed 指令 文件名 但是这样的处理,不会更改文件。只会输出到屏幕上。加上 -i 才会真正对文件产生处理。

sort

基本用法, sort (选项)(参数)
参数列表:
-n 设置依照数值大小排序
-r 以相反的顺序来排序
-t 后面跟一个分隔字符,设置排序时所用的分割字符
-k 指定需要排序的列,前面不是分隔了嘛,这里就指定以下,用第几列来排序。

posted @ 2020-02-10 14:52  时光轻轻吹  阅读(161)  评论(0编辑  收藏  举报