shell基础

1.第一个脚本:shell入门

1.1.shell脚本格式:
	脚本以#!/bin/bash 或者 #!/bin/sh (指定解析器)
	
1.2.创建一个脚本文件
	touch 文件名.sh

1.3.执行脚本文件
	sh 文件名.sh [参数列表]
		或者
	bash 文件名.sh [参数列表]
	
1.4.输出“hello world”
	#!/bin/bash
	echo "hello world"

2.第二个脚本:多命令处理

#!/bin/bash
cd /home/
touch bangzhang.txt
echo "I love you" >> banzhang.txt
	--切换至/home目录下创建banzhang.txt文件,并在文件中写入文本
	  echo:输出字符串到屏幕/提取shell变量的值

3.shell变量:

3.1.系统变量
	$HOME:当前用户的家目录
	$PWD:当前的目录
	$SHELL:默认的解析器  -->  /bin/bash
	$USER:当前用户
3.2.自定义变量
	自定义字母=值  ==>局部变量
	注意:等号两边没有空格
	
3.3.利用echo 输出变量的值

	echo $变量名

3.4.撤销变量:
	unset 变量名

3.5.静态变量:只读
	readonly 变量名=值
	
	输出打印变量
	echo $变量名
	
	静态变量手动取消不了,在虚拟机重启后,自动取消
	
	注意:在bash中,所有的变量类型都是字符串类型,无法直接进行数据运算
			如果变量的值有空格,需要用双引号括起来 "i love you"
	
3.6.把变量升级为全局变量,可供其他shell程序使用
	export 局部变量名
	
3.7.特殊变量:
	$_ 是上个命令的最后一个参数
	$? 返回的是:上一个命令的退出状态,或函数的返回值, 或最后一条命令的执行状态=>返回0:正确执行,返回非0:不正确执行
	$! 最近一个后台命令的PID
	
	$n 传递给脚本或函数的参数。n是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2....${10}....
	$0 当前脚本的文件名
	
	$# 传递给脚本或函数的参数个数。
	
	$* 传递给脚本或函数的所有参数。
	$@ 传递给脚本或函数的所有参数。
		被双引号 "值" 包含时,与$*稍有不同,
		$@不会把 "值" 当作整体
		$*会把 "值" 当作整体
	
	$$ 表示当前Shell进程的ID,即pid
	$- 列出Set命令设定的Flag

4.shell运算符

4.1 $((运算表达式))	 或  $[运算符表达式]
	s=$[运算表达式]
	echo $s

4.2 expr +,-,\*,/,% 加减乘除求余
	expr 2 + 1 每个字符之间都需要有空格
	expr `expr 2 + 3 ` \* 5 ==>等价于 (2+3)*5

5.条件判断

5.1 [ 具体的条件 ]==>中括号里面前后要有空格、
		--条件非空即为true 条件为空即为false
	(1)字符串之间的比较
		=字符串比较
	(2)数字之间的比较
		-lt 小于		-le 小于等于
		-eq 等于		-gt 大于
		-ge 大于等于	-ne 不等于
	(3)文件权限的判断
		-r 读	-w 写	-x 执行
	(4)判断文件类型
		-f 是否是普通文件
		-e 文件是否存在
		-d 是否文件夹

	(5)多条件判断
		&&:并
		||:或

6.流程控制

6.1 if判断语句
	语法:
		if[ 条件判断式 ];then
			程序代码
		fi
		
			或
			
		if [ 条件判断式 ]
			then
				程序
		fi
	注意:中括号里面前后一定要有空格
	
6.2 case语句
	case $变量名 in
	"值1")
		如果满足值1:则执行此程序
		;;
	
	"值2")
		如果满足值2:则执行此程序
		;;
		
		......
	*)
		都不满足以上的值,就执行此程序
		;;
		
6.3 for循环	
	语法1:
		for((初始值;循环条件;变量变化))
			do
				程序
			done
		
		-案例:1+...+100
			#!/bin/bash
			export s=0
			for (( a=1 ; a<= 100 ; a++ ))
			   do
					s=$[ s+a ]
			done
			echo $s

	语法2:
		for 变量 in 值1 值2 值3....  (in后面的值有依次把值赋给前面的变量)
			do 
				程序
			done
			
	例:
		#!/bin/bash
		for a in $*        ($*我们自己传入的参数)
			do
				echo $a
		done
6.4 while 循环

	while [ 条件表达式 ]
		do
			程序
		done
	
	-案例:1+...+100
		#!/bin/bash
		i=0
		a=0
		while [ $i -le 100 ]
		   do
				a=$[ a+i ]
				i=$[ i+1 ]
		done
		echo $a

	注意:[]中一定要遵循shell语法,
			-[]里面前后要有空格
			-[]里面的运算表达式需要使用shell的运算符

7.读取控制台的输入

read 选项 参数
	选项:-t指定几秒输入,
		  -p提示内容
	相当于python中的input("请输入你的名字:")
	#!/bin/bash
	read -t 10 -p "input your name:" name    (在10秒内输入你的名字)
	echo $name

8.系统函数

8.1 basename 文件路径 [文件后缀名]
	basename命令主要用于显示文件路径名剔除目录部分后的显示文件名。
	如何指定了在最后指定了文件后缀,同时也删除文件的扩展名。
		basename /home/datas/a.sh   		===>输出:a.sh	
		basename /home/datas/a.sh .sh		===>输出:a
		
8.2 dirname 文件的绝对路径
	去除文件名(非目录部分),返回文件夹路径
	
dirname+basename=文件的绝对路径

9.自定义函数

function 函数名(){
	程序
}
	#!/bin/bash
	例:
	#定义函数
		function func(){
				a=0;
				a=$[ $1+$2 ]
				return $a
		}
		read -p "输入你的第一个参数:" num1
		read -p "输入你的第二个参数:" num2
	#调用函数
		func $num1 $num2
		echo $?
		
函数返回值:return n(0-255)
			echo $?

注意:
	必须要在调用函数之前,声明函数。shell脚本是逐行运行的,不先进行编译的

10.shell工具

10.1 cut
	从文件中剪切出自己需要的数据,并将这些数据输出
	
	cut 选项 文件名
		选项:
			-f 1,2,..多列 :需要剪切第几列/多列
				-f 3- 第三列以后的
			-d "\t":指定分割符
10.2 sed
	用法1:
		查看一个文件中的某一行,或者某几行的内容
		sed -n 'a,bp' song.txt读取自第a行到第b行的数据
				
		例:
			
		cut.txt中的内容是:
			a aa
			b bb
			c cc
			d dd
			
		剪切出第一列的内容:
			cut -f 1 -d " " cut.txt
			输出的内容是:
				a
				b
				c
				d

		例:
			切取第三列”:“以后的:
				echo $PATH | cut -d ":" -f 3-
				
	用法2:
		sed编辑器逐行处理文件输入,然后把结果发送到屏幕
		
		sed 参数
			参数:
				-e:多重编译
					sed  -e ‘1,3d’ -e ‘s/abc/def/g’ file	删除1-3行,然后把其余行的abc替换成def
				a/:追加一行
					1.sed "2a 增加的内容" 针对的文件
						--在第二行下面增加内容
					2.sed "/文件中具体的文字/a\需要添加的内容" 针对的文件
				d:删除
					sed "/需要删除的内容/d" 针对的文件
				s:替换
					sed "s/需要替换的内容/替换内容/g" 针对的文件
						g:global全局的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

iku_ki

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

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

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

打赏作者

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

抵扣说明:

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

余额充值