ShellDay1
ShellDay1
shell语言
shell解释器主要的作用是将我们人类能看懂的语言解释称Linux内核能读懂的指令去执行,Linux系统自带了四个能够解释shell命令的解释器:
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
shell的优点:
- 自动备份
- 自动部署
- 监控脚本
- 自动运行任务
shell命令应用
-
注释
# #表示单行注释 :<<EOF 12312 123123 123123 EOF #表示多行注释,注意:EOF的部分可替换为其它字符,但要对应相同
-
变量
name=123 echo $name #123 unset $name #删除变量name
变量命名规范:
- 以字母开头
- 中划线或下划线连接两单词
- 同类型用数字区分:wosnd1.sh wosnd2.sh
- 末尾加上拓展名:XXX.sh XXX.txt
- 不带空格、?、*等特殊字符
- 不能使用sh中的关键字
- 不能和系统变量冲突:echo、shell等
-
输入输出
read #相当于python中的input echo #相当于python中的print read -p '文本' read -n X(数字) #表示最多输入X个字符 #换行: echo -e XXXXX\nXXX #XXXXX #XXX echo > 文件名 #覆盖写入 echo >> 文件名 #追加写入 echo `date` #显示命令的结果 #shell中,0表示True,1表示False
-
常量
x=111 readonly x #此时若再次赋予x=123则无法修改 #若要删除常量,可以下载gdb [root@master soft]# yum install gdb -y [root@master soft]# readonly x=123 [root@master soft]# cat << EOF | gdb > attach $$ > call unbind_variable("x") > detach > EOF #即可删除
数据类型
:<<eof
概括地说,编程语言的划分方式有以下三种
1、编译型or解释型
2、强类型or弱类型
2.1 强类型语言: 数据类型不可以被忽略的语言
即变量的数据类型一旦被定义,那就不会再改变,除非进行强转。
在python中,例如:name = 'xiaohu',这个变量name在被赋值的那一刻,数据类型就被确定死了,是字符型,值为'xiaohu'。
2.2 弱类型语言:数据类型可以被忽略的语言
比如linux中的shell中定义一个变量,是随着调用方式的不同,数据类型可随意切换的那种,即shell对数据类型的概念没有那么强的要求
3、动态型or静态型
3.1 动态语言 :运行时才进行数据类型检查
即在变量赋值时,就确定了变量的数据类型,不用事先给变量指定数据类型
3.2 静态语言:需要事先给变量进行数据类型定义
所以综上所述,shell是一门解释型的弱类型动态语言
eof
-
数字类型
# int整型 定义:age=18 用于标识:年龄,等级,身份证号,qq号,个数 # float浮点型 定义:salary=30000.0 用于标识:工资,身高,体重
-
字符串类型
#在shell中,加了引号的字符就是字符串类型 定义:name='xiaohu' 用于标识:描述性的内容,如姓名,性别,国籍,种族 # 注意1:字符串包含空格必须加引号 [root@master soft]# msg="hello zrx" [root@master soft]# msg=hello zrx bash: xiaohu: 未找到命令... # 注意2:连续的字符不加引号包含也是可以的,但我们还是强烈建议加上引号,规范一些 [root@master soft]# msg=hello [root@master soft]# echo $msg hello [root@master soft]# # 注意3:单引号与双引号是不同的 " " 弱引用,引号的特殊字符有意义 ' ' 强引用,引号内所有特殊字符都取消意义 [root@master soft]# name=“xiaohu” [root@master soft]# echo "${name} is good" xiaohu is good [root@master soft]# echo '${name} is good' ${name} is good
-
弱类型语言
[root@master soft]# x=10 [root@master soft]# y="3" [root@master soft]# expr $x + $y 13
-
数组类型
-
普通数组
=================声明普通数组================= # 方式一:array=(元素1 元素2 元素3) array=(xiaohu 18 male) # 方式二:array=([key1]=value1 [key2]=value2 [key3]=value3) array=([1]=111 [0]="two" [2]=333) # 方式三:依次赋值 array_new[0]=111 array_new[1]=222 array_new[2]="third" # 方式四:利用执行命令的结果设置数组元素:array=($(命令)) 或者 array=(`命令`) 该方式会将命令的结果以空格为分隔符切成多个元素然后赋值给数组 [root@master soft]# ls /test a.txt b.txt [root@master soft]# array3=(`ls /test`) [root@master soft]# declare -a |grep array3 declare -a array3='([0]="a.txt" [1]="b.txt")' # ps:查看声明过的数组 declare -a =================访问普通数组================= [root@master soft]# ip_array=(1.1.1.1 2.2.2.2 3.3.3.3) # 正向索引 [root@master soft]# echo ${ip_array[0]} 1.1.1.1 [root@master soft]# echo ${ip_array[1]} 2.2.2.2 [root@master soft]# echo ${ip_array[2]} 3.3.3.3 [root@master soft]# # 负向索引 [root@master soft]# echo ${ip_array[-1]} 3.3.3.3 [root@master soft]# echo ${ip_array[-2]} 2.2.2.2 [root@master soft]# echo ${ip_array[-3]} 1.1.1.1
-
关联数组
=================声明关联数组================= [root@master soft]# declare -A info [root@master soft]# info["name"]="xiaohu" [root@master soft]# info["age"]=18 [root@master soft]# info["gender"]="male" [root@master soft]# [root@master soft]# declare -A |grep info declare -A info='([gender]="male" [name]="xiaohu" [age]="18" )' [root@master soft]# [root@master soft]# echo ${info[*]} male xiaohu 18 [root@master soft]# [root@master soft]# echo ${info["name"]} =================访问关联数组================= declare -A info # 必须要先声明一下关联数组,才能进行赋值 [root@master soft]# info=(["name"]="xiaohu" ["age"]=18 ["gender"]="male") [root@master soft]# echo ${info[0]} xiaohu [root@master soft]# echo ${info["age"]} 18 [root@master soft]# echo ${info["gender"]} male
-