目录
前言
Linux操作系统在虚拟机VM上的安装【CentOS版本】-CSDN博客
Linux-【组管理、权限管理、定时任务调度】-CSDN博客
什么是Shell编程
Shell是一个命令行解释器,它为用户提供了一个向Linux内核直接发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
Shell脚本的执行方式
脚本格式要求
- 脚本以“#!/bin/bash”开头
- 脚本需要有可执行权限
- Shell脚本文件的后缀名以“.sh”结束
运行一个Shell
运行shell脚本有两种方式:
- 输入脚本的绝对路径或相对路径来执行(需要有文件的写权限):例如:./hello.sh /root/hello.sh
- sh + 脚本(不需要有脚本写权限):如:sh hello.sh
一个Shell例子
- 创建一个名为“hello.sh”脚本文件
- 运行脚本后输出“hello world”
Shell的变量
- Linux shell中的变量分为:“系统变量”和“用户自定义变量”
- 系统变量:$HOME、$PWD等等
- 显示当前shell所有的变量:set
shell变量的定义
基本语法:
- 在shell中使用“#”注释
- 使用shell变量,在前面加上“$”符号
- 定义变量:变量名 = 值
- 撤销变量:unset 变量
- 声明静态变量:readonly 变量(静态变量不能使用unset撤销)
注意:
- shell变量定义时,“=”左右两边不能有空格,即“A=2”是正确的,“A = 2”是错误的
#!/bin/bash
#定义变量A
A=100
echo A = $A
echo "A = $A"
#撤销变量A
unset A
echo "A = $A"
#定义静态变量B,不能unset
readonly B=2
echo "B = $B"
unset B
执行效果:
将命令的返回值赋给变量:
- A=`date`(反引号),运行里面的指令,并把结果返回给变量A
- A=$(date),等价于反引号
#!/bin/bash
#将当前日期赋值给A
A=`date`
#将一句话赋值给B
B=$(echo "123")
#输出A和B
echo "这是A:$A"
echo "这是B:$B"
效果:
设置环境变量
基本语法:
- export 变量名=变量值(将shell变量输出为环境变量/全局变量)
- source 配置文件(让修改后的配置立即生效)
简单示范
- 在/ect/profile文件中定义TOMCAT_HOME环境变量(找个空白处写上即可)
- 查看环境变量TOMCAT_HOME的值
- 输入TOMCAT_HOME变量(在使用前,需要使用source /etc/profile让其生效)
位置参数变量
当执行一个shell脚本时,如果希望收到命令行的参数信息,就可以使用位置参数变量
如:./mysehll.sh 100 200,这执行一个shell命令行,也可以在myshell脚本中获取到参数信息
基本语法:
- $n:n为数字,$0表示命令本身,$1-$9表示第一到第九个参数,10以上的参数需要使用大括号包含:${10}
- $*:代表命令行中所有参数
- $@:代表命令行中所有的参数,不过$@把每个参数区分对待
- $#:代表命令行中所有参数的个数
#!/bin/bash
echo "0=$0 1=$1 2=$2"
echo "所有的参数=$*"
echo "$@"
echo "参数个数=$#"
效果:
预定义变量
shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
基本语法
- $$:当期那进程的进程号
- $!:后台运行的最后一个进程的进程号PID
- $?:最后一次执行的命令的返回状态,如果这个变量的值为0,证明上一个命令正确执行。如果这个变量的值非0,证明上一个命令执行不正确
运算符
基本语法:
- “$((运算式))”或“$[运算符]”或“expr m + n”
- 注意expr运算符之间要有空格
- *、/、%:乘、除、取余
应用案例
- 计算(2+3)*4的值
#!/bin/bash
#计算(2+3)*4的值
#第一种方式
RES1=$(((2+3)*4))
echo "RES1 = $RES1"
#第二种方式[推荐使用]
RES2=$[(2+3)*4]
echo "RES2 = $RES2"
#第三种方式
TEMP=`expr 2 + 3`
RES4=`expr $TEMP \* 4`
echo "RES4 = $RES4"
条件判断
单流程判断
基本语法:
if [ condition ](注意condition的前后要有空格)
then [condition]
fi
常用判断条件
- =:字符串比较
- -lt:小于
- -le:小于等于
- -eq:等于
- -gt:大于
- -ge:大于等于
- -ne:不等于
- -r:对文件有读权限
- -w:对文件有写权限
- -x:对文件有执行的权限
- -f:文件存在并且是一个常规文件
- -e:文件存在
- -d:文件存在并且是一个目录
应用案例
- “ok”是否等于“ok”,使用“=”
- 23是否大于22,使用“-ge”
- /root/test.sh文件是否存在,使用“-f”或“-e”
#!/bin/bash
#"ok是否等于"ok"
if [ "ok" = "ok" ]
then
echo "相等"
fi
#23是否大于22
if [ 23 -ge 22 ]
then
echo "大于"
fi
#/root/test.sh文件是否存在
if [ -f /root/test.sh ]
then
echo "存在"
fi
多流程判断
if [ condition ](注意condition的前后要有空格)
then [condition]
elif [ condition ]
then [condition]
fi
case语句判断
基本语法:
case $变量名 in
"值1")
condition
;;
"值2")
;;
esac
for循环
语法1:
for 变量 in 值1 值2 值3...
do
程序/代码
done
语法2:
for(( 初始值; 循环控制条件; 变量变化 ))
do
程序/代码
done
while循环
基本语法1:
while [ 条件判断式 ]
do
程序/代码
done
read读取控制台输入
基本语法:
read(选项)(参数)
选项:
-p:指定读取值的提示符
-t:指定读取值时等待的时间(秒),如果没有在指定时间内输入,就不再等待
应用实例
- 读取控制台输入一个NUM1值
- 读取控制台输入一个NUM2值,在10秒内输入
#!/bin/bash
read -p "请输入一个数NUM1=" NUM1
echo "你输入的NUM1=$NUM1"
read -t 10 -p "请输入一个树NUM2,在10秒内输入" NUM2
echo "你输入的NUM2=$NUM2"
函数
shell编程和编程语言一样,有系统函数,也可以自定义函数。
系统函数
basename
功能:
返回完整路径最后“/”的部分,常用于获取文件名
语法:
basename [pathname] [suffix]
选项:
suffix为后缀,如果suffix被指定,basename会将pathname中的suffix去掉
应用实例
- 返回 /home/aaa/test.txt的“test.txt”部分:
dirname
功能:
返回完整路径最后“/”的全面的部分,常用于返回路径部分
语法:
dirname 文件绝对路径
应用实例
- 返回/home/aaa/test.txt的“/home/aaa”部分
自定义函数
基本语法:
[ function ] function_name [()]
{
action;
[return int;]
}
调用直接写函数名:“function_name [值]”
应用实例
- 计算输入两个参数的和,getSum
#!/bin/bash
#自定义函数getSum
function getSum()
{
SUM=$[$n1+$n2]
echo "和是=$SUM"
}
#输入两个值
read -p "输入一个数n1=" n1
read -p "输入一个数n2=" n2
#调用自定义函数getSum
getSum $n1 $n2
效果:
标签:shell,变量,就够,echo,语法,Shell,Linux,输入 From: https://blog.csdn.net/zheshiyangyang/article/details/142051849