变量名=变量值
注意:等号前后不能有空格
使用变量的时候,需要使用${}包裹
变量的作用域
局部:自己定义的脚本文件
全局:环境设置文件(系统【/etc】、个人[$HOME])
export AA="Hello Shell Var"
系统环境变量,默认是系统启动的时候加载,所以修改后需要使用source命令使修改生效
clear
read -p "用户名:" logName
read -s -p "密码:" logPwd
echo -e "\n你输入的用户名为:${logName} 密码为:${logPwd}"
exit 0
# 数值计算,需要使用 $[] 或者 $(()) 进行包裹,运算符有: + - * / % **
# 输入一个3位的正整数,计算每位数相加之和
read -p "输入一个3位的正整数:" num
# 123
gw=$[num%10]
sw=$[num/10%10]
bw=$[num/100]
result=$[gw+sw+bw]
echo "结果为:${result}"
$# 获取参数个数
$n n是数字,表示获取第几个参数,从1开始
$* 获取所有参数,后面可用于循环遍历
$? 获取上一个命令执行的结果 如果是0表示正常执行,非0表示执行有误
cp 本机复制
scp 跨本机复制 scp [-r] 要复制的文件 root@127.0.0.1:/路径 需要ssh的支持
cp file2 file2
# 判断式 可以用于字符串 数值 以及 文件的判断
# 判断数值:-eq (=) -ne(!=) -ge(>=) -le(<=) -gt(>) -lt(<)
[root@node scripts]# test 1 -ne 2; echo $?
0
[root@node scripts]# test 1 -ne 1; echo $?
1
# 判断字符串: = != -z(字符串长度为0) -n(字符串长度不为0
[root@node scripts]# test -n "" ; echo $?
1
[root@node scripts]# test -n "aa" ; echo $?
0
2.复习脚本
# Shell脚本
怎么创建脚本--> *.sh
怎么执行脚本?有几种方式
1. 绝对路径 --> 从根目录 /
2. bash 脚本名称 | sh 脚本名称
用户自定义变量
定义变量:变量名=变量值 'hello world'
使用变量:${变量名}
系统内置变量($)
$# : 获取参数个数
$*/$@ : 获取参数列表
$n : n是数字,表示获取第n个参数
$? : 获取上一个命令执行的结果
$PATH: 环境变量路径 /usr/bin
$HOME: 获取家目录 /root /home/用户名
数值计算:
如果要做算术运算,则需要使用$(( 计算式 )) $[ 计算式 ]
判断式:
语法:test 表达式
数值(比较运算符):-eq -ne -lt -gt -le -ge
字符串:== != -z -n
文件:-f -d -e -w -r -x
多重判断:
-a : 并且 and
-o : 或者 or
! : 取反 not
判断一个目录是否存在,如果存在,则判断是否为文件
dir='/usr/local/src/aa'
test -e dir -a -f dir
第二种判断式写法:[ 表达式 ]
(( ))
if语法:
if [判断式]
then
语句块
fi
if ((判断式)); then
语句块
elif ((判断式)); then
语句块
else
语句块
fi
# 请输入一个y/n,根据输入值判断是否继续或退出。
read -p "请输入一个数值:" num / $n 获取第n个参数
read -p "请输入一个y/n" arg
if [[ $arg == 'y' ]]; then
echo "继续"
elif [[ $arg == 'n' ]]; then
echo "退出"
else
echo "输入有误"
fi
# 输入一个年份,判断是否为闰年 逻辑判断符号: && || !
# 闰年:能被4整除且不能被100整除,或者能直接被400整除
2000 2004 2008
read -p "请输入一个年份:" year
if (( ($year % 4 == 0 && $year % 100 != 0) || $year % 400 == 0 )); then
echo "闰年"
else
echo "平年"
fi
# 使用while循环完成1...10的打印
i=1
while (( i <= 10 )) ; do
echo $i
i=$((i + 1)) # $(()) 只能做计算,不能做赋值
done
# 求偶数和
i=1
total=0
while (( i <= 10 )) ; do
if (( i % 2 == 0 ));then
total=$(( total + i ))
fi
i=$((i + 1))
done
echo $total
# 死循环
while (( 1 == 1 )) ; do
read -p "请输入一个数值:" num
if [[ $num == 'x' ]];then
break
fi
done
# for 循环
for 变量名 in 空格分割的列表 ; do
done
# 使用for循环输出1..5
for num in 1 2 3 4 5 ; do
echo $num
done
for num in 1 2 3 4 5 ; do echo $num ; done
for str in a b c d e ; do echo $str ;done
# 写一个脚本,用于数值动态求和,求和数值个数不固定
sum.sh 1 2 3 4 参数不固定
for $*/$@ while $# $n
sum=0
for num in $* ; do
sum=$(( num + sum ))
done
echo $sum
#####################################################
i=1
while (( i <= $# ));do
num=$i
sum=$(( num + sum ))
i=$(( i + 1 ))
done
echo $sum
#####################################################
for (( 初始值; 结束条件; 迭代器)); do
done
for (( i=0;i<=10;i++)); do echo $i; done
for i in seq ; do
done
seq n # 从1开始到指定n结束
seq n m # 从n开始到指定m结束
seq n s m # 从n开始到指定m结束,中间间隔 s 如果s为-1则表示倒序