shell 脚本笔记(入门到进阶)
·
目录
1 shell概念
编写shell程序的两个地方
1 解释器的交互环境:


1.1 .sh文件
linux中“.sh”文件是脚本文件,一般都是bash脚本,我们可以使用sh命令运行“sh xxx.sh”,并且由于在linux中sh是链接到bash上的,所以sh与bash在功能上是没有区别的。
2 shell 命令
2.1 echo 相当于输出print
就是相当于python的print
2.2 chsh 就是查看解析器

2.3 sh和bash 命令
就是执行.sh脚本的命令
2.4 unset 删除变量
unset jj
2.5 top
查看进程使用的内存

3 运行shell脚本的4种方式



4 linux权限之可操作性权限x
Linux系统中,对于文件目录和文件权限都有rwx即读、写、操作权限,其中r为read,读权限,w为write,写权限,好理解。那么x 的execute操作权限该如何理解呢?
这里需要区分文件、目录和可执行脚本三类来查看:文件目录的x为进入目录的权限;普通文件的x权限无太大意义;可执行shell脚本的x权限为脚本可执行权限。
5 Shell(Bash)用户自定义变量使用方法详解
每一个bash里面,都是一个进程,各个进程之间互不干扰,意思是如果你在一个bash里面,设置了一个变量,在其他的bash里面是获取不到的
如何打开一个新的bash,直接使用命令
bash

之后查看bash的进程
ps -ef|grep bash
可以看到有很多的bash进程

如何自定义变量
变量的定义就是这么简单,但是如果不遵守变量定义规则,就会报错。比如:
[root@localhost ~]# 2name="C biancheng"
-bash: 2name=shen chao: command not found
#变量名不能以数字开头
[root@localhost ~]# name = "C biancheng"
-bash: name: command not found
#左右两侧不能有空格
[root@localhost ~]# name=C baincheng
-bash: chao: command not found
#变量的值如果有空格,必须用引号包含
变量调用
当我们需要提取变量中的内容时,需要在变量名之前加入"$"符号。
也就是说,我们需要调用变量时,需要在变量名之前加入"$"符号
。那么最简单的变量调用就是通过 echo 命令输出变量的值。命令如下:
[root@localhost ~]# name="C biancheng"
#定义变量name
[root@localhost ~]# echo $name
C biancheng
#输出变量name的值
6 脚本代码规范
注释

6.1 调试,查看结果是哪个代码执行的
bash -x ff.sh

将注释也展示
bash -vx ff.sh

7 变量
如何自定义变量
变量的定义就是这么简单,但是如果不遵守变量定义规则,就会报错。比如:
[root@localhost ~]# 2name="C biancheng"
-bash: 2name=shen chao: command not found
#变量名不能以数字开头
[root@localhost ~]# name = "C biancheng"
-bash: name: command not found
#左右两侧不能有空格
[root@localhost ~]# name=C baincheng
-bash: chao: command not found
#变量的值如果有空格,必须用引号包含
变量调用
当我们需要提取变量中的内容时,需要在变量名之前加入"$"符号。
也就是说,我们需要调用变量时,需要在变量名之前加入"$"符号
。那么最简单的变量调用就是通过 echo 命令输出变量的值。命令如下:
[root@localhost ~]# name="C biancheng"
#定义变量name
[root@localhost ~]# echo $name
C biancheng
#输出变量name的值
我们在获取的值后面加单位,写法是
echo ${jj}yuan





就是输出的语句中,有变量
使用printf 命令


8 常量
readonly y=oo

9 基本数据类型(变量值的类型)

10 数组类型
10.1 普通数组

[root@192 dev]# clear
[root@192 dev]# hobby=("抽烟" "喝酒")
[root@192 dev]# echo ${hobby[0]}
先定义一个数组,之后赋值
[root@192 dev]# declare -a arr
[root@192 dev]# arr[0]=44
[root@192 dev]#
10.2 关联数组(相当于key value)

[root@192 dev]# declare -A info1=(["name"]="小红" ["age"]=15)
[root@192 dev]# echo ${info1["name"]}
小红
[root@192 dev]#
11变量值操作
11.1获取变量的长度

echo ${#y}
或者使用
[root@192 dev]# expr length $y
4
[root@192 dev]#

11.2截取字符串

${y:0:2} 从0开始,一共2个字符
[root@192 dev]# expr length $y
4
[root@192 dev]# echo ${y:0:1}
8
[root@192 dev]# echo ${y:0:2}
88
[root@192 dev]#
11.3 切断
就是对于一个字符串,将那部分切掉,留下剩余 的
#在变量后面,是切断字符串的前面的部分
%在变量的后面,是切断字符串的后面的部分
[root@192 dev]# echo ${url}
www.com
[root@192 dev]# echo ${url#ww}
w.com
[root@192 dev]# echo ${url#*.}
com
[root@192 dev]# echo ${url##*.}
com
[root@192 dev]# echo ${url%ww}
www.com
[root@192 dev]# echo ${url%com}
www.
[root@192 dev]#
11.4 替换内容

[root@192 dev]# echo ${url/www/eee}
eee.com
[root@192 dev]#
11.5 循环

[root@192 dev]# for x in 33 44 55;do echo ${x}; done
33
44
55
[root@192 dev]#
11.6 let命令

[root@192 dev]# age=18
[root@192 dev]# echo $age + 1
18 + 1
[root@192 dev]# expr $age + 1
19
[root@192 dev]# let age++
[root@192 dev]# echo $age
19
[root@192 dev]#

12 算数运算符
整数运算

小数运算
yum install bc -y

scale 保留的小数个数
[root@192 dev]# echo "scale=8;3.333+4.44" | bc
7.773
[root@192 dev]#
13 测试运算符
13.1 判断路径是否存在

echo $? 这个命令判断上一个命令是真是假
[root@192 jing]# clear
[root@192 jing]# test -d dd
[root@192 jing]# echo $?
1
[root@192 jing]#
13.2 判断文件里面长度是否大于0

13.3 判断是不是标准文件

[root@192 jing]# [ -f a.txt ];echo $?
0
[root@192 jing]#
13.4 判断当前用户对文件有没有rwx权限

[root@192 jing]# [ -r a.txt ];echo $?
0
[root@192 jing]# [ -w a.txt ];echo $?
0
[root@192 jing]# [ -x a.txt ];echo $?
1
[root@192 jing]#
13.5 赋值

14 命令后台运行
直接在命令后面加 &
[root@192 jing]# ping -c10 www.baidu.con &>/bin/null &
[1] 6478
[root@192 jing]# ps -ef|grep 6478
root 6480 5422 0 05:31 pts/0 00:00:00 grep --color=auto 6478
[1]+ 退出 2 ping -c10 www.baidu.con &> /bin/null
我们自己写的脚本,想要异步运行,就可以在脚本里面的命令里面后面写&
15 if 判断


16 case

17 while 循环


18 for循环


19 函数

更多推荐
所有评论(0)