shell是一个命令行解释器,接受应用程序用户命令,调用操作系统内核
echo $SHELL
执行shell脚本
#不赋予脚本权限
bash hello.sh
sh hello.sh
#必须具有可执行权限
./hello.sh
shell中的变量
系统变量
H
O
M
E
、
HOME、
HOME、PWD、
S
H
E
L
L
、
SHELL、
SHELL、USER
自定义变量
1、变量=值(=两侧不可有空格)
vim xhq.sh
B=3
echo $B
unset $B
readlonly A=2
unset $A
export
将变量导出为环境变量,使得当前shell绘画创建的变量可被子进程继承。
在Shell脚本编程中,export
命令用于将变量导出为环境变量,
使得在当前shell会话中创建的变量可以被子进程继承。
如果你想要让一个变量在多个shell脚本文件之间共享,
可以按照以下步骤操作:
-
定义变量:首先,在你的主脚本文件中定义一个变量。
#!/bin/bash MY_VAR="Hello, World!"
-
导出变量:使用
export
命令将该变量导出为环境变量。export MY_VAR
-
保存并运行主脚本:保存主脚本文件,并在shell中运行它。这将设置环境变量
MY_VAR
。chmod +x your_script.sh ./your_script.sh
-
在其他脚本中使用变量:在其他shell脚本文件中,你可以直接使用这个环境变量,而无需再次导出。
#!/bin/bash echo "The value of MY_VAR is $MY_VAR"
-
确保环境变量的继承:为了确保环境变量在子脚本中可用,你需要从主脚本中调用子脚本,或者在子脚本中显式地从主脚本中导入环境变量。
-
从主脚本调用:在主脚本中直接调用子脚本。
# 在主脚本中 ./another_script.sh
-
在子脚本中导入:如果子脚本需要独立运行,可以在子脚本中添加一行来从主脚本的环境导出变量。
#!/bin/bash # 假设主脚本的环境变量存储在文件中 source /path/to/environment_variables.sh echo "The value of MY_VAR is $MY_VAR"
-
请注意,环境变量只在导出它们的shell会话及其子进程中有效。
如果你希望变量在所有未来的shell会话中都可用,
你可能需要将export
命令添加到用户的.bashrc
或.profile
文件中。
另外,如果你希望变量在系统范围内持久化,
可以考虑使用系统级的配置文件,
如/etc/profile
或/etc/environment
,
但这通常需要管理员权限。
特殊变量
$n:(功能描述:n为数字,0 代表该脚本名称,1−9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 ${10})
echo “$0 $1 $2”
KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲ :获取参数个数 echo "…# 个"
∗
功能描述:这个变量代表命令行中所有的参数,
* 功能描述:这个变量代表命令行中所有的参数,
∗功能描述:这个变量代表命令行中所有的参数,*把所有的参数看成一个整体)
$@ (功能描述:这个变量也代表命令行中所有的参数,不过 $@把每个参数区分对待)
∗
、
*、
∗、@
$?
(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
判断xhq.sh脚本是否正确执行
bash xhq.sh
echo $?
四、运算符
B=$[(1+2)*4]
echo $B
条件判断
1、[ condition ](注意condition前后要有空格)
2、条件非空即为true,[ lisi ]返回true,[] 返回false。
[ 2 -gt 1 ]
比较数字大小
[ 2 -gt 1 ]
echo $?
2、判断文件权限
[ -w xhq.sh ]
echo $?
3、判断文件类型
[ -f xhq.sh ]
echo $?
五、流程控制
#!/bin/bash
if [ $1 -eq “1” ]
then
echo “the number is 1”
elif [ $1 -eq “2” ]
then
echo “the number is 2”
fi
#!/bin/bash
case $1 in
“1”)
echo “the number is 1”
;;
“2”)
echo “the number is 2”
;;
*)
echo “other number”
;;
esac
While
#!/bin/bash
sum=0
i=0
while [
i
−
l
e
10
]
d
o
s
u
m
=
i -le 10 ] do sum=
i−le10]dosum=[
i
+
i+
i+sum]
i=
[
[
[i+1]
done
echo $sum
For
#打印所有参数
for i in
∗
d
o
e
c
h
o
"
* do echo "
∗doecho"i,"
done
#1-100之和
sum=0
for ((i=0;i<=100;i++))
do
sum=
[
[
[sum+$i]
done
echo $sum
六、读取控制台输入内容
-t:等待时间
-p提示符
read -t 5 -p “your input is” NAME
echo $NAME
七、函数
basename显示文件名
dirname显示文件路径(不包含文件名)
basename /data/xhq/xhq.sh
dirname /data/xhq/xhq/sh
自定义函数
1、必须在调用函数地方之前,先声明函数,shell 脚本是逐行运行。不会像其它语言一样先编译。
2、函数返回值,只能通过 $?系统变量获得,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。return 后跟数值 n(0-255)
[ function ] funname[()]
{
Action;
[return int;]
}
funname
计算参数之和
UDA_VISIBLE_DEVICES=4 python main.py