查看所有的全局环境变量
env # 查看全局环境变量
printenv # 查看全局环境变量
printenv USER # 查看单个变量
echo $USER # 查看单个变量
set # 包含所有的全局变量和用户定义的局部变量
export # 把局部变量提升为全局变量
unset "变量名" # 取消设置变量
2)变量定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
(2〉等号两侧不能有空格
(3)在 bash中,变量默认类型都是字符串类型,无法直接进行数值运算,需要**(())** 或 []。
4)变量的值如果有经格,需要使用双引号或单引号括起来。c
$* 代表命令行中所有的参数,$*把所有的参数看成一个整体
$@ 代表命令行中所有的参数,$@把每个的参数分别看待
shell脚本的$的含义
$0: 脚本自身的名称;
$1: 传入脚本的第一个参数;
$2: 传入脚本的第二个参数;
$*:传入脚本的所有参数;
$@: 传入脚本的所有参数;
$$: 脚本执行的进程id;
$#:传入脚本的参数个数;
$?: 上一条命令执行后的状态,结果为0表示执行正常,结果为1表示执行异常;范围为(0~255)
expr 运算符
expr 3 + 2
expr 5 - 2
expr 5 \* 2
echo $((5*2))
echo $[5*2]
a=$[6+8]
echo a
a=$(expr 5 \* 2)
a=`expr 5 \* 2`
echo a
常用判断条件
(1) 两个整数之间比较
-eq 等于 -ne not equal
-lt 小于 -le less equal
-gt 大于 -ge greater equal
注:如果是字符串之间的比较,用等号“=”判断相等;用“!=”判断不等。
touch test
[ -w test ]
[ -r test ]
[ -x test ]
(2)按照文件权限判断
-r 有读权限(read)
-w 有写权限(write)
-x 有执行权限(execute)
(3)按照文件类型进行判断
-e 文件存在 (existence)
-f 文件存在并且是一个常规文件(file)
-d 文件存在并且是一个目录(directory)
流程控制
(1) if 判断
基本语法
if [ 条件判断式 ]; then
程序
fi
或者
if [ 条件判断式]
then
程序
fi
多分支
if [ ]
then
echo ""
elif [ ]
then
echo ""
elif [ ]
then
echo ""
else
echo ""
fi
(2) case
基本语法
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
...省略其他分支...
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
(2) for 循环
基本语法1
for (( 初始值; 循环控制; 变量变化 ))
do
程序
done
实例1
for (( i=1; i <= $1; i++ ))
do
sum = $[ $sum + $i ]
done
echo $sum
基本语法2
for 变量 in 值1 值2 值3...
do
程序
done
实例2
for os in linux windows macos; do echo $os; done
for i in {1..100}; do sum=$[$sum+$i]; done; echo $sum
(3) while 循环
基本语法
while [ 条件式 ]
do
程序
done
read读取控制台输入
1)基本语法
read (选项) (参数)
选项 -p 指定读取值时的提示符
-t 指定读取时等待的时间(秒);若不加则一直等待
参数
变量:指定读取值的变量名
read -t 10 -p "Enter you name: " name
echo $name
得到系统时间戳函数
date +%s
basename [dir_path] suffix
dirname
**脚本中使用系统函数 **
$( 系统函数 )
函数案例
#!/bin/bash
function add(){
s=$[$1 + $2]
echo $s
}
read -p "输入第一个参数" a
read -p "输入第二个参数" b
sum=$(add $a $b)
echo $sum
综合案例:文件归档
#/bin/bash
# 首先判断输入参数是否为1
if [ $# -ne 1 ]; then
echo "参数个数错误!应该输入一个参数,作为归档目录"
exit
fi
# 从参数中获取目录名称
if [ -d $1 ]; then
echo
else
echo
echo "目录不存在!"
echo
exit
fi
DIR_NAME=$(basename $1)
DIR_PATH=$(cd $(dirname $2); pwd)
# 获取当前日期
DATE=$(date +%y%m%d)
# 定义生成的归档文件名称
FILE=archive_${DIR_NAME}_$DATE.tar.gz
DEST=/root/archive/$FILE
# 开始归档文件
echo "开始归档"
echo
tar -czf $DEST $DIR_PATH/$DIR_NAME
if [ $? -eq 0 ]; then
echo
echo "归档成功"
echo "归档文件为:$DEST"
echo
else
echo "归档出现问题"
echo
fi
exit
alias 使用方法
在命令行环境中,别名(alias)用于为常用命令或命令序列创建自定义的简化名称。通过定义别名,你可以将复杂或冗长的命令映射为简短的别名,以便更方便地使用它们。
别名可以提高命令行的效率和易用性,特别是在需要频繁键入相同命令或命令序列时。通过使用别名,你可以减少输入的字符数量,并减少出错的可能性。
alias
以下是一些使用别名的示例:
创建常用命令的别名:
alias ll='ls -l'
在这个例子中,`ll` 是 `ls -l` 的别名。每当你键入 `ll` 时,实际上会执行 `ls -l` 命令。
创建包含多个命令的别名:
alias update='sudo apt update && sudo apt upgrade'
alias MPU_ALL='echo -e "y\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\n" | ~/mstarbbm/ssd202/project/make_usb_upgrade_sigmastar.sh'
echo 使用方法
echo -e
是一个在 Bash shell 中使用的特殊的 echo
命令选项