shell知识点

shell

shell ------ 命令解释器
shell脚本 ------ 命令的有序集合(进行批量化的处理,作为配置文件)

解释器:
sh – unix
csh – 优化了c语言的格式
tcsh – 增加了tab补全的功能
ksh – 需要许可证
ash – 轻量级的shell
bash – linux
dash – 执行脚本
rbsah – 受到bash限制,限制命令,提高保护

/etc/shells       //环境支持的解释器
echo	$SHELL		//	查看默认解释器

shell脚本的编写


eg:编写名为test的shell脚本

  1. 创建文件
vim	test.sh
  1. 脚本的编写
    #!添加解释器路径------用哪一个解释器
#!/bin/sh
#!/bin/dash
#!/bin/bash			//默认解释器
#!/bin/rbash

eg:

ls
pwd
ls -l
echo hello

一行基本上一条语句(一句话可以不用;)

  1. 修改权限
 chmod	0777	test.sh

4.运行脚本

./test.sh

eg

不需要编译,直接运行

shell中的变量

没有数据类型的概念,以字符串的形式处理
不需要定义,直接使用
赋值符号(=)前后不能有空格
变量的引用,前后有“$",给“钱”才能看内容

位置变量:

//	$0  ==  argv[0]
//	$n  n是数字,表示获取脚本的第n个参数
//	$*	或 $@	获取所有参数。不包含第一个
//	$#		获取参数个数。不包括$0
//	$$  	获取正在运行的进程的ID
//	$?		获取上一次程序或命令返回的值,成功返回0,失败返回非零数

环境变量:

HMOE			//用户家目录信息
PATH			//shell的搜索路径
HISTSIZE	//历史容量
TERM=xterm	//终端类型
SHELL=/bin/bash	//默认shell
//给钱才能看
echo	$HOME
echo	$PATH
echo $变量名
echo $(命令)
unset (变量名)		//删除变量
echo $1
echo $2
echo $9
echo $19			//19{}
echo ${19}			//大于10的话需要用花括号

命令置换符 `` (esc下面`) 没有命令置换符相当于显示字符串

num=‘ls'
num=ls

关于单引号双引号

单引号内是严格的字符串,原样输出
双引号内部可以引用变量名或者命令

输出语句

echo
echo -n			//不换行输出
echo -e			//执行转义内容
echo -n $HOME
echo -e "hello \n world"

输入语句

read
read  变量名   						//输入一行内容
read 变量名1 变量名2 变量名3			//以空格为界定多变量的赋值
read -s 变量名						//静默显示,不会显示输入的内容
read -p "input:" 变量名				//显示提示内容input
read -n num 变量名					//限制个数,输入num个字符后自动结束	
read -t time 变量名					//限制输入的时间,time秒后没输入自动结束

算数功能语句
expr
加(+)减(-)乘(*)除(/)取余(%)
符号前后要有空格

expr 2 \*  3  #直接输出结果
var1='expr 3 + 4'  #放变量时使用命令置换符
var1='expr 8 / 2'  #放变量时使用命令置换符
var='expr $var1 + var2'
echo $var

注释语句

#注释一行

:<<!
注释语句
!!
执行

./test.sh
bash test.sh
source test.sh

区别
./ 执行脚本

测试语句

test

字符串
	= 		相等返回0
	!=		不相等返回0 等返回1
	-z		判断字符串是否为空 空0 非空1
	-n		判断字符串是否不为空 空1 非空0
	
整数
	-eq		==
	-ne		!=
	-gt		>
	-lt			<
	-ge		>=
	-le		<=
	
文件
	-f			判断是否是普通文件
	-d			判断是否是目录文件
	-c			判断是否是字符设备文件
	-l			判断是否是链接文件
	-b			判断是否是块设备文件
	-s			判断是否是套接字文件
	-p			判断是否是管道文件
	-r			判断文件是否可读
	-w		判断文件是否可写
	-x			判断文件是否可执行
	-e			判断文件是否可存在
	
	f1 -nt f2 			//测试文件1是否比文件2更新
	f1 -ot f2 			//测试文件1是否比文件2更旧

示例
结构性语句
if then else

if	判断表
		then		
				语句块
fi

if------then------fi
if------then------else------fi
if------then------elif------then------fi
注意:
一个 fi 对应一个 if
可用【】代替test,前后要加空格

结构性语句

case
case 变量名 in
判断执行标志 ) 执行语句 ;;
判断执行标志 ) 执行语句 ;;
*) 执行语句;;
esac
注意:
case语句只能检测字符串变量
判断执行的标志可以有多个 “|” “)" (用或分隔,括号表示结束)
;; 相当于c语言中的break
最后一个双分号可以省略
* 表示其他字符 类似default

#!/bin/bash

echo "which one"
read choose
case $choose in
1)
	echo "free"
	;;
2)
	echo "love"
	;;
3)
	echo "friend"
	;;
*)
	echo "nothing"
	;;
esac

while

while 判断表
do  #开始
		代码
done #结束
num=1;sum=0
while [ $sum -le 100 ]
do
		sum=`expr $sum + $num`
		num=`expr $num + 1`
done
		echo
		echo $sum
num=1;sum=0
while((num<=100))
do
		((sum+=num))
		((num++))
done
echo $sum
1+++++100=

在shell中运用c语言格式加 (())

for
for 变量 in 循环表
do
代码
done
注意:
变量依次取循环表中的值
循环的次数由循环表中的个数决定
如果循环表内容是位置参数,可以省略“in循环表”
seq
seq 尾数 #默认从1开始 每次加1
seq 增量 尾数 #默认从1开始
seq 首数 增量 尾数
seq 1 1 100 #从1开始每次增加1,100结束

for

for((;;))
		do
			echo 
		done

break&continue

	break		退出循环
	break		退出一层循环
	break n		退出n层循环
	
	continue		跳过本次循环,执行下一次循环
	continue n		若n=2,跳过本次循环,而执行上一层循环的下一次循环

shell 函数

	shell中函数的格式:

function 函数名()
{
}
注意:function代表这是一个函数,function可以省略。
shell函数没有参数列表
在shell中没有返回值类型
在shell函数中使用的变量默认为全局变量(使用local申明的变量,为局部变量)
函数的调用
函数名
函数名 agr1 arg2 arg3
		函数中参数的获取方式
			通过位置变量获取
		$0  显示脚步的名字
		注意:使用的是source解析时,$0 表示的是bash
		$0 $1 $2 $3 $4 $5 $6  ${n} 对应的参数
		$# 命令行参数的个数
		$@  $*  命令行所有的参数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值