shell是什么
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序。
用户可以用Shell来启动,挂起,停止,编写一些程序。
Shell脚本执行方式
脚本格式要求
- 脚本以 #!/bin/bash 开头
- 脚本需要有可执行权限
- 一般shell脚本文件以 .sh 为后缀
- 在shell中用 # 表示注释
- 多行注释为 起始处 :<<! 结尾处 !
创建的shell脚本文件即使是root权限也不会给x执行权限,需要自己增加
脚本常用执行方式
-
输入脚本的绝对路径或相对路径
需要该脚本的执行权限
-
sh 脚本.sh
这样不需要执行权限
需要cd跳转到存放sh脚本文件的目录下才可使用
Shell变量
Shell变量介绍
-
Linux的Shell中变量分为,系统变量和用户自定义变量
-
系统变量:\(HOME**,**\)PWD,\(SHELL**,**\)USER等等
-
显示当前shell中所有变量
set
Shell用户自定义的变量
基本语法(在 xxx.sh 文件内)
- 定义变量
变量=值
- 输出变量
echo $变量
输出变量为 $变量名
即使是 echo "A=$A",shell也会将 $变量名 这种格式的认为是变量而不是字符串
必须 变量=值 之间不能存在空格!
- 撤销变量
unset 变量名
- 声明静态变量
静态变量不会被反复定义和初始化
静态变量一旦定义就无法unset了
readonly 变量名=值
Shell变量的定义规则
- 变量名可以由,字母,数字,下划线组成,不能以数字开头
- 等号俩侧不能有空格!
- 变量名一般为大写
将指令返回的结果赋值给变量
A=`命令`
A=$(命令)
命令上面是 反引号!在tab键上面一个键
设置环境变量
基本语法
将shell变量输出为环境变量
让这个变量可以在其他文件中使用。
设置环境变量必须在 /etc/profile 文件内
这个文件也设置jdc等环境变量
设置环境变量后需要 source 才能让配置生效
-
export 变量名=变量值
让修改后的配置信息立即生效
-
source 配置文件
查询环境变量的值
-
echo $变量名
位置参数变量
假设我们输入命令
./hello.sh 100 200 300
要想让shell脚本文件获取到这个 100 200 300数据,就可以使用位置参数变量了
基本语法
- $n
- n为数字
- $0 代表命令本身,$1~$9 代表第一个到第9个参数
- 10以上的参数用 ${10} 这样写
- $*
- 这个表示所有参数
- $*把所有参数当成一个整体
- $@
- 这个表示所有参数
- $# 把所有参数区分当成个体看呆
- $#
- 这个代表所有参数的个数
预定义变量
就是shell设计者事先定义好的变量,可以直接在shell脚本中使用。
基本语法
- \[ 当前进程的进程号 \]
- $? 最好溢出执行的命令的返回状态,如果这个变量值为0,证明上一个命令正确执行,否则就不正确执行
路径 &
这种方式可以让程序在后台执行
运算符
基本语法
$((运算表达式))
expr m + n
$[运算式]
如果要将expr的运算表达式赋给变量,需要用反引号将其包含起来
expr中符号的用法:
\* 乘
/ 除
% 取余
m + n 在expr中需要存在空格!
条件判断
判断语句基本语法(双分支)
if [ 判断条件 ]
then
条件为true执行的语句
else
条件为flase执行的语句
fi
简写法:
[ 判断条件 ] && 条件为true执行语句
判断条件前后要有空格
if 和条件之间需要空格
[ ]返回false(有空格!)
[ dwadwa ]返回true
0为true ,>1 为false
常用判断条件
在前面加上 ! 即为否定
比如 ! -f 文件不存在
-
字符串之间比较
=
if [ 字符串1 = 字符串2 ]
-
俩个整数的比较
if [ 1 -lt 2 ]
符号 描述 -lt 小于 -le 小于等于 -eq 等于 -gt 大于 -ge 大于等于 -ne 不等于 -
按照文件权限判断
if [ 选项 文件路径 ]
符号 描述 -r 有读的权限 -w 有写的权限 -x 有执行的权限 -
按照文件类型进行判断
if [ 符号 文件路径 ]
符号 描述 -f 文件存在且是一个常规文件 -e 文件存在 -d 文件存在且是一个目录
流程控制(多分支if)
基本语法
if [ 条件判断 ]
then
代码
elif [ 条件判断 ]
then
代码
...
fi
流程控制(case语句)
基本语法
case $变量名 in
"值1")
代码1
;;
"值2")
代码2
;;
.....
*)
最终情况
;;
esac
循环
for循环
基本语法1
for 变量 in 值1 值2 值3...
do
代码
done
举例:
for i in $*
do
echo "num is $i"
done
输入10 11 12
输出 num is 10 11 12
因为$*是把位置参数当成整体
for i in $@
do
echo "num is $i"
done
输入10 11 12
输出
num is 10
num is 11
num is 12
因为$@是把位置参数当成了个体
基本语法2
for((初始变量;循环条件;变量变化))
do
代码
done
举例
从1加到100的值输出显示
SUM=0 #给SUM变量初始化
for((i=1;i<=100;i++))
do
SUM=$[$SUM+$i] #运算符,这里的SUM不加美元符号是因为这里是给SUM赋值
done
echo "$SUM"
while循环
需要注意的是条件判断前后需要空格
while 和条件之间也需要空格
且这里的条件和for里面循环条件不同,这里的循环条件要用if里面的规则!
基本语法
while [ 条件判断 ]
do
程序
done
举例
从1加到n的值
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo "SUM=$SUM"
read读取控制台输入(相当于scanf,Scanner这种)
基本语法
read (选项) (参数) 接受值得变量
选项
-p 指定读取值时的提示信息
-t 指定读取值的等待时间,如果未在规定时间输入就不等待
举例
read -p "请输入一个值num=" NUM
其中NUM1是接受从控制台输入值的变量
-p 后面的内容是从控制台等待读取值的时候的提示信息
这个相当于scanf("请输入一个值num=%d",$NUM1)
read -t 10 NUM2
等待10s如果10后没有获取到数值就停止等待
结合起来写法
read -p 参数 -t 参数 接受值变量
函数
shell编程有系统函数和自定义函数俩种。
系统函数
常用几个系统函数!多的自己查=-=
basename
功能:返回完整路径最后 / 的部分,常用于获取文件名
基本语法
basename 文件路径 文件后缀
basename会删除掉所有的前缀包括最后一个 '/' 字符,然后将字符串显示出来
举例
basename /home/aaa/text.txt 这样会返回 text.txt 这个字符串
basename /home/aaa/text.txt .txt 这样会返回 text 这个字符串
dirname
功能:返回完整路径最后 '/' 的前面部分,常用于返回路径部分
基本语法
dirname 绝对路径
举例
dirname /home/aaa/bbb/a.txt 这样返回 /home/aaa/bbb 这个字符串
自定义函数
基本语法
function 函数名()
{
代码块;
return $变量 #如果不需要返回值就可以不写return
}
调用方法
函数名 值1 值2 值3....
自定义函数的括号里面不需要加形参!
在自定义函数内部的 $1,$2是形参,代表的是
函数名 值1 值2 值3
$1是值1,$2是值2
一般的我们会在调用函数后使用 $? 来调用结果
但是这个只能获取到0到255之间的数
常用几种写法
写法1
function add()
{
s=$[ $1 + $2 ]
retrun $s
}
read -p "第一个值" a
read -p "第二个值" b
add $a $b
echo $? #前面一条命令执行的结果代码,这个结果代码只能返回0--255
解决return只能返回0~255的方法
举例:
function add()
{
s=$[ $1 + $2 ] #这里的1和2是形参,代表a,b的值
echo $s #打印输出s的变量值
}
read -p "第一个数=" a
read -p "第二个数=" b
sum=$(add $a $b) #打印输出的值赋给sum变量!
echo $sum
局部变量
一般用于定义局部变量,用于函数体内,作用域为定义位置开始到函数结束
local 变量名=值
这样定义的是局部变量
标签:文件,shell,变量,--,语法,read,Linux,变量名 From: https://www.cnblogs.com/wdadwa/p/Linux_Learning_11.html