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 变量
变量的定义规则
- 变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
- 等号两侧不能有空格
- 在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
- 变量的值如果有空格,需要使用双引号或者单引号括起来。
- 使用变量的话,需要使用$变量名
特殊变量
$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 指定需要排序的列,前面不是分隔了嘛,这里就指定以下,用第几列来排序。