Linux高阶—shell脚本编程基础(六)

目录

一、学习Shell脚本编程前,先学习脚本三个变量:系统变量、用户变量、环境变量。

二、特殊字符:

三、声明变量:

四、if语句逻辑运算符:

五、for 语句循环:

六、while语句循环:

七、select && case 语句循环:


一、学习Shell脚本编程前,先学习脚本三个变量:系统变量、用户变量、环境变量。

系统变量:系统变量通常写在/etc/profile或/etc/profile.d中,对所有用户生效,常用变量举例:

1、$?:表示脚本执行的状态,0表示正常,其他表示错误

2、$$:表示进程的id;Shell本身的PID(ProcessID,即脚本运行的当前 进程ID号)

3、$!:Shell最后运行的后台Process的PID(后台运行的最后一个进程的 进程ID号)

4、$0:表示执行的脚本名称

5、$1:表示第一个参数

6、$2:表示第二个参数

7、$*:表示执行脚本传入参数的列表(不包括$0,一个参数总体)

8、$@:表示执行脚本传入参数的所有个数(不包括$0,多个参数个体)

9、$#:表示执行脚本传入参数的个数

10、$RANDOM:默认会产生0~32767的随机整数,$[$RANDOM%2]代表产生0~1之间的随机数。

理解系统变量的含义:

#!/bin/sh
MY_SHELL_PATH=`dirname $0`
echo "print shell script location:"
echo ${MY_SHELL_PATH}
echo "====================================" 
echo "enter shell script location:${MY_SHELL_PATH}"
cd `dirname $0`
echo "list current directory content:"
ls -ltr
echo "===================================="
echo "shell script name=$0"
echo "===================================="
echo "first args=$1"
echo "====================================" 
echo "second args=$2"
echo "===================================="
echo "arguments number=$#"
echo "===================================="
echo "arguments list content=$@"
echo "===================================="
echo "arguments list content=$*"
echo "===================================="
echo "the process id is " "$$"
echo "===================================="
echo "the shell execute return value is " "$?"
echo "===================================="
echo "the all paramters:"
for i in "$@"
  do
    echo $i
  done
echo "===================================="
echo "the all paramters:"
for i in "$*"
  do
    echo $i
  done
echo "===================================="

ff1a87002d44474b98a1e28e29319511.png

区分$@与$*,通过for循环结果判断如下:

b5f9ef374dba4e2486e46eb43388c3e3.png

用户变量:用户变量通常写在用户的个人配置文件~/.profile中,只对当前用户生效,用户定义的变量名必须由字母,数字及下划线组成,并且变量名的第一个字符不能为数字,举例:

1、加载环境变量:export JAVA_HOME=/opt/jdk1.8

2、自定义变量:export aa=22

环境变量:则主要是在程序运行时需要设置, 关闭则变量消失,一般会添加到用户变量文件里,常用变量举例:

1、PATH:命令所示路径,以冒号为分割。

2、HOME:打印用户家目录。

3、SHELL:显示当前shell类型。

4、USER:打印当前用户名。

5、ID:打印当前用户ID信息。

6、PWD:显示当前所在路径。

7、TERM:打印当前终端类型。

8、HOSTNAME:显示当前主机名。

二、特殊字符:

\                 ##转译单个字符

""                ##弱引用,批量转译""中出现的字符,不能转译 \ ` ! $

''                ##强引用,批量转译''中出现的字符

``                ##将''中命令的输出信息,赋值给变量,同 $()

${}               ##变量声明,在需要时,用来确定变量边界

-v                ##是grep排除的参数,例如查询除了包含ABC的行,例如cat a.txt|grep -v 'ABC'
^                 ##代表行首,$代表行尾。 ^$是空行的意思
^#               ##表示首字母为#的行,linux里的文件,#号开头一般都是注释内容

三、声明变量:

declare [+/-][选项] 变量名

选项:
-:给变量舍得类型属性
+:取消变量的类型属性
-a:将变量声明为数组型(x、y)
-i:将声明的变量视为整数,对它赋值时会进行算术求值,不过仅支持最基本的数学运算,不支持逻辑运算、自增自减等,所以很少使用。
-x:将变量声明为环境变量
-r:将变量声明为只读变量
-p:查看变量的被声明的类型

四、if语句逻辑运算符:

-e 通过文件名文件是否存在

-f 通过文件名判断是否是文件

-d 通过文件名判断是否为目录

-eq 判断两个数值是否相等

-ne 判断两个数值是否不相等

-gt 判断第一个数值是否大于第二个数值

-lt 判断第一个数值是否小于第二个数值

-ge 判断第一个数值是否大于等于第二个数值

-le 判断第一个数值是否小于等于第二个数值

-z 判断字符串是否是空串

-n 判断字符串是否不是空串

=  判断两个字符串是否相等

!=判断两个字符串是否不相等

-a (and)相等于&&

-o (or)相当于||

​理解if 判断:

#!/bin/bash
read -p "请输入一个数字:" num
# 实现判断输入的字符是数字还是字母或者是其他符号
function isNum(){
if [[ $1 =~ ^[a-zA-Z]+$ ]] # 正则匹配多个输入的字符
then
  echo "$1 是纯字母"
  return 1
elif [[ $1 =~ ^[0-9]+$ ]] # 匹配多个数字
then
  echo "$1是纯数字"
  return 0
else
  echo "$1是其他字符"
  return 1
fi
}
# 调用函数
isNum $num
#判断函数的返回结果
if [ $? == 0 ]
then
  if [ $num -gt 10 ]
  then 
   echo "$num 大于10"
  elif [ $num -eq 10 ]
  then  
   echo "$num 等于10"
  else
   echo "$num 小于10"
  fi
else
 echo "输入内容不符合要求"
fi
echo "结束!"

五、for 语句循环:

#-------语法---------#
for VARIABLE in (list)
do
    command
done

#-------脚本1---------#
#!/bin/bash
declare -i SUM=0
for i in {1..100}; #或者 for i in `seq 1 100`
do
let SUM=$SUM+$i
done
echo "1+..+100=$SUM"

六、while语句循环:

#-------语法---------#
while expression
do 
     command
done

#-------脚本1---------#
# 死循环
#!/bin/bash
while true   # 或":"
do
    echo "hello world"
done
#-------脚本2---------#
# 与IFS配合
#!/bin/bash
IFS=":"
while read user pass uid gid info home shell
do
  echo -e "name:$user \tUID:$uid,\thome:$home"
done < /etc/passwd
#-------脚本3---------#
#!/bin/bash
aaa=$[$RANDOM % 10] #自动生成商品价格:0-10内的随机数。
echo "商品价格为0-10,猜实际价格"
bbb=0
while true
do
   read -p "请输入你猜的及价格: "  n
   let bbb++
if [ $aaa -eq $n ]
    then
    echo "恭喜你答对了!!!"
    echo "你一共答了$bbb 次"
    exit 0

elif [ $n -gt $aaa ]
    then
    echo "太高了"
    else
    echo "太低了"
fi
done

七、select && case 语句循环:

#!/bin/bash
echo "请根据提示选择一个选项"
select item in "CPU" "IP" "MEM" "exit"
do
    case $item in
    "CPU")
        uptime;;
    "IP")
        ip a s;;
    "MEM")
        free;;
    "exit")
        exit;;
    *)
        echo error;;
    esac
done

上一篇:Linux高阶—接口性能压测​jmeter(五)

下一篇:Linux高阶—shell远程批处理脚本(七)

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值