shell(一)

shell 既是脚本语言又是应用程序
查看自己linux系统的默认解析:echo $SHELL
在这里插入图片描述创建第一个shell 文件

touch 01.sh

编辑

vi 01.sh

01.sh 文件内容

#!/bin/bash
echo 'felicia'

保存 按Esc 然后输入:wq

定义以开头:#!/bin/bash

#!用来声明脚本由什么shell解释,否则使用默认shell

添加文件可执行权限

chmod +x 01.sh

运行

三种执行方式 (./xxx.sh bash xxx.sh . xxx.sh)

./xxx.sh :先按照 文件中#!指定的解析器解析 指定解析器不存在 使用系统默认解析器

bash xxx.sh:指明先用bash解析器解析 bash不存在 才会使用默认解析器
. xxx.sh 默认解析器解析(不会执行第一行的#!指定的解析器)但是第一行还是要写的

变量

#!/bin/bash
echo 'felicia'
age=18
echo $age
#unset 清除变量
unset age
echo $age

read 接收输入的值

#!/bin/bash
age=18
echo "age=$age"
echo "请输入age的值"
read age
echo "age=$age"

read`命令的选项包括:

-d:指定输入行的结束标志。
-p:在输入前打印提示信息。
-e:允许在输入时使用命令补全功能。
-n:指定输入文本的长度。
-t:指定读取等待时间为指定的秒数。
-r:允许输入包含反斜杠。
-a:把输入行按空格分割并存入数组。
-p “text”:打印提示信息(text),等待输入,并将输入存储在变量中。
-d “:”:用冒号作为输入行的结束标志。

可以通过read --help 查看
read 读取多个数据 read age2 age3

read age2 age3
echo "age2=$age2"
echo "age3=$age3"

只读变量

readonly num=10
echo "num=$num"
num=18
echo "num=$num"

在这里插入图片描述
查看环境变量 env

aaa=19
#将aaa 设为系统变量
export aaa
#查找系统变量
env | grep aaa
#定义并设置系统变量
export bbb=22
env |grep bbb

ccc=23
#查找 用户变量和系统变量
set |grep ccc

echo:显示某个环境变量值
expor:设置一个新的环境变量
env:显示所有环境变量
unset:清除环境变量
set:显示本地定义的shell变量和环境变量

$0 当前执行的Shell脚本的文件名
$1-$9 当前Shell脚本的参数1-9
$# 当前Shell脚本的参数数量
$? 上一次执行的命令的退出状态
$* 所有当前Shell脚本的参数,作为一个单独的字符串
$@ 所有当前Shell脚本的参数,作为多个独立的字符串
$! 上一次在后台运行的任务的进程ID
$$ 当前Shell脚本的进程ID
$- 当前Shell使用的选项(标志)
$IFS Shell脚本中用于指定字段分隔符的值

#!/bin/bash

echo "Script name: $0"
echo $0
echo "第1个参数:$1"
echo "第2个参数:$2"
echo "参数个数:$#"
echo "所有参数:$*"
for i in "$*";do
        echo $i
done
echo "所有参数:$@"
for i in "$@";do
        echo $i
done

在这里插入图片描述
日期

#!/bin/bash
echo "当前日期`date`"
#echo "未来日期:`date -d +1 hour`"
date -d "+1 hour" +"%Y-%m-%d %H:%M:%s"

-e 转义

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

在这里插入图片描述
()由子shell完成 子shell 不会影响当前shell 的值

#!/bin/bash
num=18
(
num=22
echo "()里num=$num"
)
echo “当前num=$num

在这里插入图片描述
()由当前shell完成

#!/bin/bash
num=18
{
num=22
echo "()里num=$num"
}
echo “当前num=$num

在这里插入图片描述
判断变量是否存在

#!/bin/bash
num=100
if [ -v num ];then
        echo "变量存在"
else
        echo "变量不存在"
fi

操作字符串

#!/bin/bash
str="felicia_jammy_lili"
echo "str长度${#str}"
#从下标为4的位置开始提取
echo ${str:4}
#从下标为4的位置提取长度为3字节
echo ${str:4:3}
#替换第一个出现的字符 ${str/旧字符/新字符}
echo ${str/_/:}
#替换所有字符  ${str//旧字符/新字符}
echo ${str//_/:}

在这里插入图片描述
文件测试运算符
-b (file) 检测文件是否是块设备文件,如果是,则返回true,举例:[-b $file]返回false
-c file 检测文件是否是字符设备文件,如果是,则返回true,举例:[-c $file] 返回false
-d file 检测文价是否是目录,如果是,则返回true。举例:[-d $file] 返回false
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回true。举例:[-f $file] 返回true
-g file 检测文件是否设置了SGID位,如果是,则返回true。举例:[-g $file] 返回false
-k file 检测文件是否设置了粘着位(sticky bit),如果是,则返回true。举例:[-k $file] 返回false
-p file 检测文件是否是有名管道,如果是,则返回true。举例:[-p $file] 返回false
-u file 检测文件是否设置了SUID位,如果是,则返回true。举例[-u $file] 返回false
-r file 检测文件是否可读,如果是,则返回true. 举例:[-r $file] 返回true
-w file 检测文件是否可写,如果是,则返回true。举例:[-w $file]
-x file 检测文件是否可执行,如果是,则返回true。举例:[-x $file] 返回true
-s file 检测文件是否为空(文件大小是否大于0),不为空返回true。举例:[-s $file] 返回true
-e file 检测文件(包括目录)是否存在,如果是,则返回true,举例:[-e $file] 返回true

#!/bin/bash
read -p "请输入文件名" file_name
[ -e $file_name ]
echo $?

Shell还提供了与( -a , &&)、或( -o, || )、非( ! )三个逻辑操作符用于将测试条件连接起来,优先级从高到低依次为:”!”,”-a”,”-o”。

test -e是一个Shell内置命令,用于检查文件是否存在。如果文件存在,test -e命令返回0,表示真(true)。如果文件不存在,返回1,表示假(false)。
-e是test命令的一个参数,表示检查文件存在性。
-o是逻辑运算符,表示逻辑“或”。

#!/bin/bash
#检查011.sh文件是否存在,如果不存在,则检查./bash目录是否存在。
if test -e 011.sh -o -e ./bash
then
        echo "至少有一个文件存在"
else
        echo "两个都不存在"
fi

-d file 检查file是否存在 且为目录
-e file 检查file是否存在
-f file 检查file是否存在 且为文件
-r file 检查file是否存在 且可读
-s file 检查file是否存在 且非空
-w file 检查file是否存在 且可写
-x file 检查file是否存在 且可执行
-O file 检查file是否存在 且属当前用户所有
-G file 检查file是否存在 且默认组与当前用户相同
file1 -nt file2 检查file1是否比file2新
file1 -ot file2 检查file1是否比file2旧

if 控制语句
if [条件1]; then
执行第一段程序
elif [条件2];then
执行第二段程序
else
执行第三段程序
fi

#!/bin/bash
function wirte_text(){
        echo "$1 即将写入内容"
       cat>"$1"<< EOF
		$2
EOF
        echo "$1 内容写入成功"
}

read -p "请输入文件夹名称" dir_name
#获取当前路径
path=$(pwd)
if test -e $dir_name; then
	echo "$dir_name 文件夹存在 即将进入该文件夹"
	cd $dir_name 
	read -p "请输入文件名称" file_name
	if test -e $file_name; then 
          echo "$file_name文件存在,即将读取文件内容"
          echo $(cat $file_name)
	else
		echo "$file_name文件不存在 即将创建文件"
		touch $file_name
		echo "$file_name文件创建成功"
		echo "$(ls)"
		text='
			你好
			好久不见
		'
		wirte_text $file_name "$text"
	fi
else
	echo "$dir_name 文件夹不存在 即将创建"
	mkdir $dir_name
	echo "$dir_name 文件创建成功"
	echo $(ls $path)
	read -p "请输入文件名称" file_name
	touch "$path/$dir_name/$file_name"
	cd $path/$dir_name
	echo $path/$dir_name
	echo $(ls "$path/$dir_name")
	text="你好
		hi
		"
	echo "$text"
       wirte_text $file_name "$text"
	
fi


注意 wirte_text $file_name "$text" 需要用""

函数分文件,调用函数

#!/bin/bash
function max_num(){
        if(($1>$2));then
                return $1
        else
                return $2
        fi
}
function min_num(){
        if(($1<=$2));then
                return $1
        else
                return $2
        fi
}

#!/bin/bash
#导入函数文件
source 18.sh
read -p "请输入数字1:" num1
read -p "请输入数字2:" num2
max_num $num1 $num2
echo "$num1$num2的最大值是:$?"
min_num $num1 $num2
echo "$num1$num2的最小值是:$?"
  • 19
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值