目录
一、学习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 "===================================="
区分$@与$*,通过for循环结果判断如下:
用户变量:用户变量通常写在用户的个人配置文件~/.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远程批处理脚本(七)
更多推荐
Linux高阶—shell脚本编程基础(六)
发布评论