最后
javascript是前端必要掌握的真正算得上是编程语言的语言,学会灵活运用javascript,将对以后学习工作有非常大的帮助。掌握它最重要的首先是学习好基础知识,而后通过不断的实战来提升我们的编程技巧和逻辑思维。这一块学习是持续的,直到我们真正掌握它并且能够灵活运用它。如果最开始学习一两遍之后,发现暂时没有提升的空间,我们可以暂时放一放。继续下面的学习,javascript贯穿我们前端工作中,在之后的学习实现里也会遇到和锻炼到。真正学习起来并不难理解,关键是灵活运用。
[keafmd@vm1 datas]HOME
/home/keafmd
(2)显示当前Shell中所有变量:set
[keafmd@vm1 datas]$ set
BASH=/bin/bash
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
**1.基本语法
(1)定义变量:变量=值
(2)撤销变量:unset 变量
(3)声明静态变量:readonly变量,注意:不能unset**
**2.变量定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
(2)等号两侧不能有空格
(3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
(4)变量的值如果有空格,需要使用双引号或单引号括起来。**
3.案例实操
(1)定义变量A
[keafmd@vm1 datas]$ A=5
[keafmd@vm1 datas]A
5
(2)给变量A重新赋值
[keafmd@vm1 datas]$ A=8
[keafmd@vm1 datas]A
8
(3)撤销变量A
[keafmd@vm1 datas]$ unset A
[keafmd@vm1 datas]A
(4)声明静态的变量B=2,不能unset
[keafmd@vm1 datas]$ readonly B=2
[keafmd@vm1 datas]B
2
[keafmd@vm1 datas]$ B=9
-bash: B: readonly variable
(5)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算
[keafmd@hadoop102 ~]$ C=1+2
[keafmd@hadoop102 ~]C
1+2
(6)变量的值如果有空格,需要使用双引号或单引号括起来
[keafmd@hadoop102 ~]$ D=I love banzhang
-bash: world: command not found
[keafmd@hadoop102 ~]$ D="I love banzhang"
[keafmd@hadoop102 ~]A
I love banzhang
(7)可把变量提升为全局环境变量,可供其他Shell程序使用
export 变量名
[keafmd@vm1 datas]$ vim helloworld.sh
在helloworld.sh文件中增加echo $B
#!/bin/bash
echo "helloworld"
echo $B
[keafmd@vm1 datas]$ ./helloworld.sh
Helloworld
发现并没有打印输出变量B的值。
[keafmd@vm1 datas]$ export B
[keafmd@vm1 datas]$ ./helloworld.sh
helloworld
2
1.基本语法
$n (功能描述:n为数字,
$0代表该脚本名称,
9代表第一到第九个参数,
十以上的参数需要用大括号包含,如${10})
2.案例实操
(1)输出该脚本文件名称、输入参数1和输入参数2 的值
[keafmd@vm1 datas]$ touch parameter.sh
[keafmd@vm1 datas]$ vim parameter.sh
#!/bin/bash
echo "1 $2"
[keafmd@vm1 datas]$ chmod 777 parameter.sh
[keafmd@vm1 datas]$ ./parameter.sh cls xz
./parameter.sh cls xz
1.基本语法
$# (功能描述:获取所有输入参数个数,常用于循环)。
2.案例实操
(1)获取输入参数的个数
[keafmd@vm1 datas]$ vim parameter.sh
#!/bin/bash
echo "1 $2"
echo $#
[keafmd@vm1 datas]$ chmod 777 parameter.sh
[keafmd@vm1 datas]$ ./parameter.sh cls xz
parameter.sh cls xz
2
1.基本语法
*把所有的参数看成一个整体)
@把每个参数区分对待)
2.案例实操
(1)打印输入的所有参数
[keafmd@vm1 datas]$ vim parameter.sh
#!/bin/bash
echo "1 $2"
echo $#
echo $*
echo $@
[keafmd@vm1 datas]$ bash parameter.sh 1 2 3
parameter.sh 1 2
3
1 2 3
1 2 3
1.基本语法
$? (功能描述:最后一次执行的命令的返回状态。
如果这个变量的值为0,证明上一个命令正确执行;
如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
2.案例实操
(1)判断helloworld.sh脚本是否正确执行
[keafmd@vm1 datas]$ ./helloworld.sh
hello world
[keafmd@vm1 datas]?
0
=================================================================
1.基本语法
(1)“[运算式]”
(2)expr + , - , *, /, % 加,减,乘,除,取余
注意:expr运算符间要有空格
2.案例实操:
(1)计算3+2的值
[keafmd@vm1 datas]$ expr 2 + 3
5
(2)计算3-2的值
[keafmd@vm1 datas]$ expr 3 - 2
1
(3)计算(2+3)X4的值
(a)expr一步完成计算
[keafmd@vm1 datas]$ expr expr 2 + 3 * 4
20
(b)采用$[运算式]方式
[keafmd@vm1 datas]# S=$[(2+3)*4]
[keafmd@vm1 datas]# echo $S
==================================================================
1.基本语法
[ condition ](注意condition前后要有空格)
注意:条件非空即为true,[ keafmd ]返回true,[] 返回false。
2. 常用判断条件
(1)两个整数之间比较
= 字符串比较
-lt 小于(less than) -le 小于等于(less equal)
-eq 等于(equal) -gt 大于(greater than)
-ge 大于等于(greater equal) -ne 不等于(Not equal)
(2)按照文件权限进行判断
-r 有读的权限(read) -w 有写的权限(write)
-x 有执行的权限(execute)
(3)按照文件类型进行判断
-f 文件存在并且是一个常规的文件(file)
-e 文件存在(existence) -d 文件存在并是一个目录(directory)
3.案例实操
(1)23是否大于等于22
[keafmd@vm1 datas]$ [ 23 -ge 22 ]
[keafmd@vm1 datas]?
0
(2)helloworld.sh是否具有写权限
[keafmd@vm1 datas]$ [ -w helloworld.sh ]
[keafmd@vm1 datas]?
0
(3)/home/keafmd/cls.txt目录中的文件是否存在
[keafmd@vm1 datas]$ [ -e /home/keafmd/cls.txt ]
[keafmd@vm1 datas]?
1
(4)多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一条命令执行失败后,才执行下一条命令)
[keafmd@vm1 ~]$ [ condition ] && echo OK || echo notok
OK
[keafmd@vm1 datas]$ [ condition ] && [ ] || echo notok
notok
======================================================================
1.基本语法
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi
**注意事项:
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2)if后要有空格**
2.案例实操
(1)输入一个数字,如果是1,则输出banzhang zhen shuai,如果是2,则输出cls zhen mei,如果是其它,什么也不输出。
[keafmd@vm1 datas]$ touch if.sh
[keafmd@vm1 datas]$ vim if.sh
#!/bin/bash
if [ $1 -eq "1" ]
then
echo "banzhang zhen shuai"
elif [ $1 -eq "2" ]
then
echo "cls zhen mei"
fi
[keafmd@vm1 datas]$ chmod 777 if.sh
[keafmd@vm1 datas]$ ./if.sh 1
banzhang zhen shuai
1.基本语法
ase $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
注意事项:
1)case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
2)双分号“;;”表示命令序列结束,相当于java中的break。
最后的“*)”表示默认模式,相当于java中的default。
3)最后的“*)”表示默认模式,相当于java中的default。
2.案例实操
(1)输入一个数字,如果是1,则输出banzhang,如果是2,则输出cls,如果是其它,输出renyao。
[keafmd@vm1 datas]$ touch case.sh
[keafmd@vm1 datas]$ vim case.sh
!/bin/bash
case $1 in
"1")
echo "banzhang"
;;
"2")
echo "cls"
;;
*)
echo "renyao"
;;
esac
[keafmd@vm1 datas]$ chmod 777 case.sh
[keafmd@vm1 datas]$ ./case.sh 1
1
1.基本语法1
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
2.案例实操
(1)从1加到100
[keafmd@vm1 datas]$ touch for1.sh
[keafmd@vm1 datas]$ vim for1.sh
#!/bin/bash
s=0
for((i=0;i<=100;i++))
do
s=s+$i]
done
echo $s
[keafmd@vm1 datas]$ chmod 777 for1.sh
[keafmd@vm1 datas]$ ./for1.sh
“5050”
3.基本语法2
for 变量 in 值1 值2 值3…
do
程序
done
4.案例实操
(1)打印所有输入参数
[keafmd@vm1 datas]$ touch for2.sh
[keafmd@vm1 datas]$ vim for2.sh
#!/bin/bash
#打印数字
for i in $*
do
echo "ban zhang love $i "
done
[keafmd@vm1 datas]$ chmod 777 for2.sh
[keafmd@vm1 datas]$ bash for2.sh cls xz bd
ban zhang love cls
ban zhang love xz
ban zhang love bd
(2)比较@区别
(a)@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以2 …$n的形式输出所有参数。
[keafmd@vm1 datas]$ touch for.sh
[keafmd@vm1 datas]$ vim for.sh
#!/bin/bash
for i in $*
do
echo "ban zhang love $i "
done
for j in $@
do
echo "ban zhang love $j"
done
[keafmd@vm1 datas]$ bash for.sh cls xz bd
ban zhang love cls
ban zhang love xz
ban zhang love bd
ban zhang love cls
ban zhang love xz
ban zhang love bd
(b)当它们被双引号“”包含时,“1 n”的形式输出所有参数;“1” “n”的形式输出所有参数。
[keafmd@vm1 datas]$ vim for.sh
#!/bin/bash
for i in "$*"
#$*中的所有参数看成是一个整体,所以这个for循环只会循环一次
do
echo "ban zhang love $i"
done
for j in "$@"
#@”中有几个参数,就会循环几次
do
echo "ban zhang love $j"
done
[keafmd@vm1 datas]$ chmod 777 for.sh
[keafmd@vm1 datas]$ bash for.sh cls xz bd
ban zhang love cls xz bd
ban zhang love cls
ban zhang love xz
ban zhang love bd
1.基本语法
while [ 条件判断式 ]
do
程序
done
2.案例实操
(1)从1加到100
[keafmd@vm1 datas]$ touch while.sh
[keafmd@vm1 datas]$ vim while.sh
#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
s=s+$i]
i=i+1]
done
echo $s
[keafmd@vm1 datas]$ chmod 777 while.sh
[keafmd@vm1 datas]$ ./while.sh
5050
=========================================================================
1.基本语法
read(选项)(参数)
选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒)。
参数
变量:指定读取值的变量名。
2.案例实操
(1)提示7秒内,读取控制台输入的名称
[keafmd@vm1 datas]$ touch read.sh
[keafmd@vm1 datas]$ vim read.sh
#!/bin/bash
read -t 7 -p "Enter your name in 7 seconds " NAME
echo $NAME
[keafmd@vm1 datas]$ ./read.sh
Enter your name in 7 seconds xiaoze
xiaoze
================================================================
1.basename基本语法
basename [string / pathname] [suffix]
(功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
2.案例实操
(1)截取该/home/keafmd/banzhang.txt路径的文件名称
[keafmd@vm1 datas]$ basename /home/keafmd/banzhang.txt
banzhang.txt
[keafmd@vm1 datas]$ basename /home/keafmd/banzhang.txt .txt
banzhang
3. dirname基本语法
dirname 文件绝对路径
(功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
4.案例实操
(1)获取banzhang.txt文件的路径
[keafmd@vm1 ~]$ dirname /home/keafmd/banzhang.txt
/home/keafmd
1.基本语法
[ function ] funname[()]
{
Action;
[return int;]
}
funname
2.经验技巧
**(1)必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。
(2)函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)**
3.案例实操
(1)计算两个输入参数的和
[keafmd@vm1 datas]$ touch fun.sh
[keafmd@vm1 datas]$ vim fun.sh
#!/bin/bash
function sum()
{
s=0
s=1 + $2 ]
echo "$s"
}
read -p "Please input the number1: " n1;
read -p "Please input the number2: " n2;
sum n2;
[keafmd@vm1 datas]$ chmod 777 fun.sh
[keafmd@vm1 datas]$ ./fun.sh
Please input the number1: 2
Please input the number2: 5
7
==========================================================================
cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。
1.基本用法
cut [选项参数] filename
说明:默认分隔符是制表符
2.选项参数说明
| 选项参数 | 功能 |
| --- | --- |
| -f | 列号,提取第几列 |
| -d | 分隔符,按照指定分隔符分割列 |
3.案例实操
(0)数据准备
[keafmd@vm1 datas]$ touch cut.txt
[keafmd@vm1 datas]$ vim cut.txt
dong shen
guan zhen
wo wo
lai lai
le le
(1)切割cut.txt第一列
[keafmd@vm1 datas]$ cut -d " " -f 1 cut.txt
dong
guan
wo
lai
le
(2)切割cut.txt第二、三列
[keafmd@vm1 datas]$ cut -d " " -f 2,3 cut.txt
shen
zhen
wo
lai
le
(3)在cut.txt文件中切割出guan
[keafmd@vm1 datas]$ cat cut.txt | grep "guan" | cut -d " " -f 1
guan
(4)选取系统PATH变量值,第2个“:”开始后的所有路径:
[keafmd@vm1 datas]PATH
/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/keafmd/bin
[keafmd@hadoop102 datas]PATH | cut -d: -f 2-
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/keafmd/bin
(5)切割ifconfig 后打印的IP地址
[keafmd@vm1 datas]$ ifconfig eth0 | grep "inet addr" | cut -d: -f 2 | cut -d" " -f1
192.168.1.102
sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
1.基本用法
sed [选项参数] ‘command’ filename
2.选项参数说明
| 选项参数 | 功能 |
| --- | --- |
| -e | 直接在指令列模式上进行sed的动作编辑。 |
3.命令功能描述
| 命令 | 功能描述 |
| --- | --- |
| a | 新增,a的后面可以接字串,在下一行出现 |
| d | 删除 |
| s | 查找并替换 |
4.案例实操
(0)数据准备
[keafmd@hadoop102 datas]$ touch sed.txt
[keafmd@hadoop102 datas]$ vim sed.txt
dong shen
guan zhen
wo wo
lai lai
le le
(1)将“mei nv”这个单词插入到sed.txt第二行下,打印。
[keafmd@hadoop102 datas]$ sed '2a mei nv' sed.txt
dong shen
guan zhen
mei nv
wo wo
lai lai
le le
[keafmd@hadoop102 datas]$ cat sed.txt
dong shen
guan zhen
wo wo
lai lai
le le
#注意:文件并没有改变
(2)删除sed.txt文件所有包含wo的行
[keafmd@hadoop102 datas]$ sed '/wo/d' sed.txt
dong shen
guan zhen
lai lai
le le
(3)将sed.txt文件中wo替换为ni
[keafmd@hadoop102 datas]$ sed 's/wo/ni/g' sed.txt
dong shen
guan zhen
ni ni
lai lai
le le
注意:‘g’表示global,全部替换
(4)将sed.txt文件中的第二行删除并将wo替换为ni
[keafmd@hadoop102 datas]$ sed -e '2d' -e 's/wo/ni/g' sed.txt
dong shen
ni ni
lai lai
le le
一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。
1.基本用法
awk [选项参数] ‘pattern1{action1} pattern2{action2}...’ filename
pattern:表示AWK在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令
2.选项参数说明
| 选项参数 | 功能 |
| --- | --- |
| -F | 指定输入文件折分隔符 |
| -v | 赋值一个用户定义变量 |
3.案例实操
(0)数据准备
[keafmd@hadoop102 datas]$ sudo cp /etc/passwd ./
最后:
总结来说,面试成功=基础知识+项目经验+表达技巧+运气。我们无法控制运气,但是我们可以在别的地方花更多时间,每个环节都提前做好准备。
面试一方面是为了找到工作,升职加薪,另一方面也是对于自我能力的考察。能够面试成功不仅仅是来自面试前的临时抱佛脚,更重要的是在平时学习和工作中不断积累和坚持,把每个知识点、每一次项目开发、每次遇到的难点知识,做好积累,实践和总结。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】