shell脚本

本文介绍了Shell脚本的基础知识,包括变量的定义与使用、作用域(局部与全局)、环境变量设置,以及数值计算。讲解了条件判断如数值比较和字符串判断,还展示了如何使用`if`语句和循环结构。此外,文章提供了示例脚本来练习输入验证、数值判断和循环操作。
摘要由CSDN通过智能技术生成

变量名=变量值
注意:等号前后不能有空格
使用变量的时候,需要使用${}包裹

变量的作用域
局部:自己定义的脚本文件
全局:环境设置文件(系统【/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则表示倒序


如果在脚本中要执行命令,并获取命令执行后的结果,则需要使用`` 或者 $() 包裹
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值