shell学习总结

1、shell是什么

shell是一个命令行编辑器,它接收应用程序/用户命令,然后调用操作系统内核,shell也是一个强大的编程语言,易编写、易调试、灵活性强。

2、Linux提供的shell解析器有哪些

[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh

3、sh与bash的关系关系是什么

sh -> bash sh是指向bash

4、Centos默认解析器是什么

/bin/bash

5、创建第一个shell脚本
5.1、创建

脚本文件以 #!/bin/bash 开头,指定解析器
创建helloworld.sh文件

vim helloworld.sh

编辑好后保存

#!/bin/bash

echo "hello world"
5.2、运行脚本

常用执行方式
方式一:使用bash或sh + 脚本的相对路径或者绝对路径

sh/bash ./helloworld.sh
sh/bash /root/helloworld.sh

方式二:在运行脚本之前,需要给文件赋予可执行权限

[root@localhost ~]# chmod -x helloworld.sh
[root@localhost ~]# ./helloworld.sh
6、shell变量有几种
6.1、系统预定义变量

常用系统变量:$HOME, $SHELL, $PWD, $USER等

6.2 自定义变量

基本语法:
定义变量:变量名=变量值,注意:等号之间不能有空格
撤销变量:unset 变量名
声明静态变量:readonly 变量,注意:不能unset

7、特殊变量
7.1、$n

n表示数字,$0代表脚本名称,$1~$9代表第一个到第九个参数,十以上的参数需要大括号包含,eg: ${10}
eg:

[root@localhost ~]# vim parameter.sh
[root@localhost ~]# chmod 777 parameter.sh 
[root@localhost ~]# cat parameter.sh 
#!/bin/bash

echo $0
echo $1
echo $2
echo $3
[root@localhost ~]# ./parameter.sh aaa bbb ccc
./parameter.sh
aaa
bbb
ccc
[root@localhost ~]# 
7.2、$#

获取所有输入参数的个数,常用于循环,判断参数个数是否正确以及加强脚本的健壮性
eg:

[root@localhost ~]# vim parameter.sh
[root@localhost ~]# cat parameter.sh 
#!/bin/bash
echo '========$n========'
echo $0
echo $1
echo $2
echo $3

echo '========$#========'
echo $#
[root@localhost ~]# ./parameter.sh aaa bbb
========$n========
./parameter.sh
aaa
bbb

========$#========
2
[root@localhost ~]# 
7.3、$*, $@

都代表命令行中的所有参数,$*把所有参数看成是一个整体, $@把每个参数区分对待
eg:

[root@localhost ~]# vim parameter.sh
[root@localhost ~]# cat parameter.sh 
#!/bin/bash
echo '========$n========'
echo $0
echo $1
echo $2
echo $3

echo '========$#========'
echo $#

echo '========$*========'
echo $*

echo '========$@========'
echo $@
[root@localhost ~]# ./parameter.sh aaa bbb ccc
========$n========
./parameter.sh
aaa
bbb
ccc
========$#========
3
========$*========
aaa bbb ccc
========$@========
aaa bbb ccc
[root@localhost ~]# 
7.4、$?

返回最后一次执行命令的状态,如果返回的值为0,则上一个命令正确执行;如果返回的值为非0,则上一个命令不正确执行

8、运算符

语法:$((运算式子)) 或 $[运算式子]
eg:
$(( 2 * 8 )) 或 $[ 2 * 8 ]

9、条件判断
9.1、基本语法

(1)、 test condition
(2)、[ condition ] 注意:condition前后需要空格
注意:条件非空即为 true,[ atguigu ]返回 true,[ ] 返回 false。

9.2、常用判断条件
9.2.1、整数之间的判断
命令功能
-eq等于(equal)
-ne不等于(no equal)
-lt小于(less than)
-le小于等于(less equal)
-gt大于(greater than)
-ge大于等于(greater equal)
9.2.2、文件权限进行判断
命令功能
-r有读的权限 read
-w有写的权限 write
-x有执行的权限 execute
9.2.2、文件类型进行判断
命令功能
-e文件存在(existence)
-f文件存在并且是一个常规文件(file)
-d文件存在并且是一个目录(directory)
9.2.3、多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一条命令执行失败后,才执行下一条命令)
10、流程控制
10.1、if判断

基本语法:
单分支

if [ 条件 ];
then
	程序
fi

或者

if [ 条件 ]
then
	程序
fi

多分支

if [ 条件 ]
then
	程序
elif [ 条件 ]
	程序
else
	程序
fi

注意事项:
① [ 条件判断式 ],中括号和条件判断式之间必须有空格
② if 后要有空格
eg:

#!/bin/bash
if [ $1 -eq 1 ]
then
	echo "banzhang zhen shuai"
elif [ $1 -eq 2 ]
then
	echo "cls zhen mei"
fi
10.2、case语句

基本语法:

case $变量名 in
"值1“)
	程序1
;;
"值2“)
	程序2
;;
"值3“)
	程序3
;;

....省略其他分支....

*)
	程序
;;
esac

注意事项:
(1)case 行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
(2)双分号“;;”表示命令序列结束,相当于 java 中的 break。
(3)最后的“*)”表示默认模式,相当于 java 中的 default。

!/bin/bash
case $1 in
"1")
	echo "banzhang"
;;
"2")
	echo "cls"
;;
*)
	echo "renyao"
;;
esac
10.3、for循环语句

语法1:

for (( 初始值;控制条件;变量变化 ))
do
	程序
done

eg:

#!/bin/bash
sum=0
for((i=0;i<=100;i++))
do
	sum=$[$sum+$i]
done
echo $sum

语法2:

for 变量 in 值 1 值 2 值 3…
do
	程序
done

eg:

#!/bin/bash

for i in aaa bbb ccc
do
	echo "this is $i"
done
10.4、while循环

语法:

while [ 条件判断式 ]
do
	程序
done

eg:

#!/bin/bash
sum=0
i=1
while [ $i -le 100 ]
do
	sum=$[$sum+$i]
	i=$[$i+1]
done
echo $sumdi
11、read读取控制台输入

语法:
read (选项) (参数)
选项:
-p:指定读取值时的提示符
-t:指定读取值时等待时间(秒)如果-t不加表示一直等待
参数
变量:指定读取值的变量名
eg:

#!/bin/bash
read -t 7 -p "Enter your name in 7 seconds :" NN
echo $NN
12、函数
12.1、系统函数
12.1.1、 basename

语法:
basename [string / pathname] [suffix]
basename命令会删除掉所有的后缀包括最后一个”/“字符,然后将字符串显示出来
basename命令可以理解为获取文件名
suffix 为后缀,如果 suffix 被指定了,basename 会将 pathname 或string 中的suffix 去掉。

eg:

[root@localhost ~]# basename /root/test/test.txt
test.txt
[root@localhost ~]# basename /root/test/test.txt .txt
test
12.1.1、dirname

语法:
dirname 文件绝对路径
dirname命令可以理解为获取文件的绝对路径
eg:

[root@localhost ~]# dirname /root/test/test.txt
/root/test
12.2 自定义函数

语法:

function funname() {
	程序
}

经验技巧
(1)必须在调用函数地方之前,先声明函数,shell 脚本是逐行运行。不会像其它语言一样先编译。
(2)函数返回值,只能通过$?系统变量获得,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。return

eg:

[root@localhost ~]# touch fun.sh
[root@localhost ~]# 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 $n1 $n2;
[root@localhost ~]# chmod 777 fun.sh
[root@localhost ~]# ./fun.sh
Please input the number1: 2
Please input the number2: 5
7
13、文本处理工具
13.1、cut

cut 的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。

语法:
cut [选项参数] filename
选项参数

选项参数功能
-f列号,提取第几列
-d分隔符,按照指定分隔符分割列,默认是制表符“\t”
-c按字符进行切割 后加加 n 表示取第几列 比如-c 1
13.2、awk

awk是一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。

语法:
awk [选项参数] ‘/pattern1/{action1} /pattern2/{action2}…’ filename
pattern:表示 awk 在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令

选项参数功能
-F指定输入文件分隔符
-v赋值一个用户定义变量

eg:

[root@localhost ~]# awk -F : '{print "filename:" FILENAME ",linenum:"NR ",col:"NF}' passwd
filename:passwd,linenum:1,col:7
filename:passwd,linenum:2,col:7
filename:passwd,linenum:3,col:7
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

珍朱(珠)奶茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值