shell

目录

一、【shell的概述】

1、什么是shell

2、系统自动调用的两个脚本文件

二、创建并执行shell

1、创建shell

2、执行shell的三种方式

三、shell的自定义变量

1、写操作

 2、读操作

 只读变量

 3、将脚本的变量导出变成环境变量

4、" " 和 ' ' 区别

5、shell的预设变量

6、shell的特殊用法

1)``(!左边的符号),作为系统命令

2)转义符,date -e 才生效

3) () 和{ } 的区别

7、条件测试语句

1)文件测试语句

2)字符串测试语句

3)数字测试语句

4)复合测试

5)if语句:

6)elif语句

7) case语句

8)for语句

9)while循环

10)shell函数


一、【shell的概述】

1、什么是shell

shell既是软件又是语言。是用户和linux内核的接口程序

软件:shell命令解析器 bash sh ash 等 将脚本文件逐行解析执行

语言:必须符合解析器的规则

2、系统自动调用的两个脚本文件

1)/etc/profile :对系统所有用户有效果 登陆时候

2) ~/.bashrc:对登陆的用户有效 打开终端或者登陆都会执行

二、创建并执行shell

1、创建shell

myfirst.sh:

#!/bin/bash 指定解释器
echo "hahha" 编写shell
####如果执行权限,使用chmod +x myfirst.sh增加可执行权限

2、执行shell的三种方式

1) ./myfirst.sh //检测第一行指定解释器

2) bash myfirst.sh // 指定使用bash ,会忽略第一行

这两种会启用新的shell去执行脚本

3) . myfirst.sh //使用当前shell,不会启用新的shell

注:如果有格式错误:

1、使用 dow2unix 脚本文件

2、使用vi打开文件,在最后一行模式下执行

:set ff=unix

三、shell的自定义变量

1、写操作

#!/bin/bash
#定义变量
num=10 #"="两边不能有空格
#对变量读操作
echo $num
#对变量写操作
num=100
echo $num
#清除一个变量
unset num
echo "------"
echo $num  #打印空白

 2、读操作

#!/bin/bash
num=0
#从键盘获取变量
echo "请输入num的值"
read num
#如果想输入的num值是在上面语句紧接这后面
#使用:read -p "请输入num的值:" num
echo "num = $num"

 只读变量

readonly data=10 #只读变量
echo "data=$data"
data=20

 3、将脚本的变量导出变成环境变量

#!/bin/bash
export data=2000
echo "data=$data"

4、" " 和 ' ' 区别

" "   :”可以解析变量

' '    :不可以解析变量

5、shell的预设变量

#!/bin/bash
echo "参数的个数:$#"
echo "参数的内容:$*"
echo "第一个参数是:$1"
echo "第二个参数是:$2"
echo "$?"

$#参数的个数

$*参数的内容

$1 $2 $3......就是第几个参数

$? 返回0 就是上一条语句执行成功,返回1就是失败

6、shell的特殊用法

1)``(!左边的符号),作为系统命令

echo "today is `date`

2)转义符,date -e 才生效

echo -e "####\n####"

3) () 和{ } 的区别

():

num=10
(
	num=100
	echo "()中的num=$num"
)
echo "()外的num=$num"

{ }:

num=10
{
	num=100
	echo "()中的num=$num"
}
echo "()外的num=$num"

 

7、条件测试语句

1)文件测试语句

#!/bin/bash
test -e  1.txt
echo "$?"
#两种语法
[ -e 1.txt ]
echo "$?

2)字符串测试语句

1、测试两个字符串是否相等

str2="haha"
str3="hehe"
test "$str2" == "$str3"
echo "$?" #不相等返回1,相等返回0
test "$str2" != "str3"
echo "$?" #不相等返回0,相等返回1 

2、测试字符串是否为空

str=""
test -z "$str" 
echo "$?" #0 表示为空


str1="hello world"
test -z "$str1"
echo "$?" #1表示非空

3、返回字符串长度

str4="hahahahahhhah"
echo "${#str4}" #返回13

4、替换、提取字符串

echo "${str4:3:6}" #从第三个字符开始提取6个字节

echo "${str4/a/e}" #用e替换第一个a

echo "${str4//a/e}" #用e替换所有a

3)数字测试语句

1)判断大小等于

read -p "请输入两个数"  num1 num2
test $num1 -eq $num2
echo "$?"  #相等返回0,不相等返回1

[ $num1 -gt $num2 ]
echo "$?"  #大于返回0,否则返回1

 

2)echo ${num:-val} :如果num存在则表达式为num,如果不存在就等于val

4)复合测试

案例:判断test.c是否是普通文件并且是可读可写

test -f test.c -a -r test.c -a -w test.c

touch test.c 
test -f test.c -a -r test.c -a -w test.c 
echo "$?"

运行:

5)if语句:

#!/bin/bash
read -p "请输入文件名" filename
if [ -e $filename ];then  #判断是否存在文件
	if [ -f $filename -a -s $filename ] ;then #判断是否是普通文件和空文件
		cat $filename
	else
		echo "存在但不是普通文件或者文件为空"
	fi
else  #否则就创建文件,并且输入内容并查看
	touch $filename
	read -p "请输入文件内容" str
	echo "$str" >> $filename
	echo  "文件内容是:`cat $filename`"
fi

6)elif语句

#!/bin/bash
read -p "请输入你的选择(yes/no)" choice
if [ $choice = "yes" ];then
	echo "选择了yes"
elif [ $choice = "no" ];then
	echo "选择了no"
else
	echo "你选择了其他"
fi

7) case语句

#!/bin/bash
read -p "请输入你的选择(yes/no):" choice
case $choice in
	"yes")
	echo "你选择的yes"
	;;
	"no")
	echo "你选择的no"
	;;
	*)
	echo "你选择的其他"
	exit 1
esac

8)for语句

break 跳出 continue进入下一次循环

形式1:

#!/bin/bash
for filename in `ls` 
do
	if [ -d $filename ];then
		echo "$filename是文件夹"
	elif [ -f  $filename ]; then
			echo "$filename 是普通文件" 
	fi
done

形式2:

#!/bin/bash
declare num=0
declare i=0;
for ((i;i<=100;i++ ))
do
	num+=$i
done
echo "num=$num"

9)while循环

#!/bin/bash
declare -i i=0
declare -i num=0
while [ $i -le 100 ]
do 
	num+=$i
	i=$i+1
done
echo "num=$num"

10)shell函数

#!/bin/bash
declare -i a 
 my_add()
{
	a=$1+$2
	return $a
}
read -p "请输入两个相加数" data1 data2
my_add data1 data2
echo "返回值为 $?"

分文件也可以:要使用resouce

myshell1.sh

`#!/bin/bash

declare -i a 
 my_add()
{
	a=$1+$2
	return $a
}

myshell.sh

#!/bin/bash
resouce myshell.sh1
read -p "请输入两个相加数" data1 data2
my_add data1 data2
echo "返回值为 $?"

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值