编写shell程序的两个地方 1 解释器的交互环境:
linux中“.sh”文件是脚本文件,一般都是bash脚本,我们可以使用sh命令运行“sh xxx.sh”,并且由于在linux中sh是链接到bash上的,所以sh与bash在功能上是没有区别的。
就是相当于python的print
就是执行.sh脚本的命令
unset jj
查看进程使用的内存
Linux系统中,对于文件目录和文件权限都有rwx即读、写、操作权限,其中r为read,读权限,w为write,写权限,好理解。那么x 的execute操作权限该如何理解呢?
这里需要区分文件、目录和可执行脚本三类来查看:文件目录的x为进入目录的权限;普通文件的x权限无太大意义;可执行shell脚本的x权限为脚本可执行权限。
每一个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的值
注释
bash -x ff.sh
将注释也展示
bash -vx ff.sh
如何自定义变量
变量的定义就是这么简单,但是如果不遵守变量定义规则,就会报错。比如:
[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 命令
readonly y=oo
[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]#
[root@192 dev]# declare -A info1=(["name"]="小红" ["age"]=15)
[root@192 dev]# echo ${info1["name"]}
小红
[root@192 dev]#
echo ${#y}
或者使用
[root@192 dev]# expr length $y
4
[root@192 dev]#
${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]#
就是对于一个字符串,将那部分切掉,留下剩余 的 #在变量后面,是切断字符串的前面的部分 %在变量的后面,是切断字符串的后面的部分
[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]#
[root@192 dev]# echo ${url/www/eee}
eee.com
[root@192 dev]#
[root@192 dev]# for x in 33 44 55;do echo ${x}; done
33
44
55
[root@192 dev]#
[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]#
整数运算
小数运算
yum install bc -y
scale 保留的小数个数
[root@192 dev]# echo "scale=8;3.333+4.44" | bc
7.773
[root@192 dev]#
echo $? 这个命令判断上一个命令是真是假
[root@192 jing]# clear
[root@192 jing]# test -d dd
[root@192 jing]# echo $?
1
[root@192 jing]#
[root@192 jing]# [ -f a.txt ];echo $?
0
[root@192 jing]#
[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]#
直接在命令后面加 &
[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
我们自己写的脚本,想要异步运行,就可以在脚本里面的命令里面后面写&