变量的种类
——–shell—–父shell —————-
| |
|———–bash 子shell—–|
变量:
1 环境变量 对当前shell及系统上的其他shell全部生效
2 仅对当前的shell环境生效
3 仅对当前shell的某一段生效(函数)
子shell只会继承环境变量
并不会继承父shell中的变量
. 或者 source /etc/profile 只在当前的shell环境中执行,一般用来校对环境变量
变量的赋值:
“” 弱引用 会把双引号里面的变量替换
” 强引用 不会把引号里面的变量进行替换
“把反引号里面的命令执行结果赋值给变量
HZ=$SH 用变量赋值变量
定义一个环境变量:
export
declare -x
declare -x 环境变量
-r 只读变量
-i 定义数值类型(整形)
算术运算
(1) let num=算术表达式 let r=9+9
(2) var=$[算术表达式] r=$[9+9]
(3) var=$((算术表达式)) r=$((9+9))
(4) expr 8 +
3 (要有空格)
(5)declare -i r=9+9
(6)bc
echo
{1..100} | tr ” ” “+” | bc
5050
(7) +=, i+=3等于i=i+3
(8) -=, i-=3等于i=i-3
(9)*=, i*=3等于i=i*3
(10) /=,
(11)%=
(12)i++ 先执行 执行完加1 (用的比较多)
(13)++i 先加1,再执行
例子:
[root@Centos7 script]# a=10
[root@Centos7 script]# b=10
[root@Centos7 script]# let c=a++
[root@Centos7 script]# echo $c
10
[root@Centos7 script]# echo $a
11
[root@Centos7 script]# let d=++b
[root@Centos7 script]# echo $d
11
[root@Centos7 script]# echo $b
11
[root@Centos7 script]#
字体颜色:30——37
echo -e
“\033[30m黑色字 \033[0m”
echo -e
“\033[31m红色字 \033[0m”
echo -e
“\033[32m绿色字 \033[0m”
echo -e “\033[33m黄色字 \033[0m”
echo -e “\033[34m蓝色字 \033[0m”
echo -e “\033[35m紫色字 \033[0m”
echo -e “\033[36m天蓝字 \033[0m”
echo -e “\033[37m白色字 \033[0m”
字体背景颜色40—–47
echo -e
“\033[40;37m黑底白字 \033[0m”
echo -e
“\033[41;37m红底白字 \033[0m”
echo -e
“\033[42;37m绿底白字 \033[0m”
echo -e
“\033[43;37m黄底白字 \033[0m”
echo -e
“\033[44;37m蓝底白字 \033[0m”
echo -e
“\033[45;37m紫底白字 \033[0m”
echo -e
“\033[46;37m天蓝底白字 \033[0m”
echo -e
“\033[47;30m白底黑字 \033[0m”
逻辑运算
true 1
false 0
1 与 1 = 1
1 与 0 = 0
0 与 1 = 0
0 与 0 = 0
1 或 1 = 1
1 或 0 = 1
0 或 1 = 1
0 或 0 = 0
!1 = 0
!0 = 1
&& 与
|| 或
1 && 1 = 1
1 && 0 = 0
1 || 1 = 1
1 || 0 = 1
短路预算:
命令1 && 命令2 命令1 成功执行 则执行命令2
命令1 执行失败
则不会执行命令2
命令1 || 命令2 命令1成功执行,则命令2不执行
命令1执行失败,则命令2执行
命令1
&& 命令2 || 命令3
如果命令1 成功执行 则执行命令2 且命令3不会执行
如果命令1 执行失败 那么命令2就不会执行,则命令3执行
如果 命令1 成功
则 命令2;
否则 命令3;
退出状态
使用$? 0代表前面一个命令执行成功
非0 代表前面一个命令执行失败
可以在脚本里面自定义退出状态
根据退出状态来判断一个命令的执行成功与否
exit [n]:自定义退出状态码
注意:脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字
注意:如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码
例子:
grep -q “root” /etc/passwd && echo
“user exists” || echo “user not exists”
user exists
grep -q “rooooot” /etc/passwd &&
echo “user exists” || echo “user not exists”
user not exists
[root@Centos7 ~]# ls -d /u &>/dev/null && echo “dic exists” ||
echo “dic not exists”
dic not exists
测试条件
test 测试条件
[ 测试条件 ]
[[ 测试条件 ]] 条件测试的前后要加上空格
生产环境建议使用两个中括号
数值测试:
-gt: 是否大于
-ge: 是否大于等于
-eq: 是否等于
-ne: 是否不等于
-lt: 是否小于
-le: 是否小于等于
[[ 6 > 2
]] && echo “OK”
字符串测试
==
>
<
!=
=~ 左边的字符串是否包含右边指定的字符串
-z 测试字符串是否为空
-n 测试字符串是否不为空
例子:
[root@Centos7 script]# [ 1 -gt 2 ] && echo
“OK”
[root@Centos7 script]# [ 3 -gt 2 ] && echo
“OK”
OK
[root@Centos7 script]#
[root@Centos7 script]# [ 3 -ge 2 ] && echo
“OK”
OK
[root@Centos7 script]# [ 2 -ge 2 ] && echo
“OK”
OK
[root@Centos7 script]# [ 2 > 2 ] && echo
“OK”
OK
[root@Centos7 script]#
[root@Centos7 script]# [ 1 > 2 ] && echo
“OK”
OK
[root@Centos7 script]# [ 1 \> 2 ] && echo
“OK”
[root@Centos7 script]#
[root@Centos7 script]# [ 5 \> 2 ] && echo
“OK”
OK
[root@Centos7 script]# [ 6 \> 2 ] && echo
“OK”
OK
文件测试:
-d 判断是否存在 且是否是目录
-f 判断是否存在 且是否是普通文件
-r FILE:是否存在且可读
-w FILE: 是否存在且可写
-x FILE: 是否存在且可执行
判断当前用户对文件有读写执行的权限(root)
read -p 指定提示内容
-t 指定超时时间
产环境在写脚本的时候
一般前面会先读一下环境变量配置文件
. /etc/profile
java php
测试环境 生产环境1 生产环境2 生产环境3
php php php
php
172.16.0.1 192.168.1.1
192.168.1.100
如果代码里面包含一些关于数据库的配置 比如MySQL Redis
配置标准化
定义专门的环境变量的配置文件,比如webenv.sh
export MYSQL=1.1.1.1
export
MUSER=mysql
export
MPASSWD=12345
在/etc/profile里最后一行t添加
. webenv.sh
PATH=$PATH:/usr/local/apache/bin
/etc/issue 登录前提示信息
/etc/motd 登陆后提示信息
字符串切片:
eg:MYNAME=”liangchenye”
substr=${MYNAME:4}
2 ${变量:位置起点:长度}
eg:MYNAME=”liangchenye”
substr2=${MYNAME:4:6}
给某个不存在的变量一个默认值
${待测变量:=默认值}
若变量不存在或其值为空,则符合判断,传回默认值
unset myname
echo ${myname:=”fuerkang”}
测试变量是否为空或者不存在,提示错误信息
${待测变量:?提示信息}
echo ${name:?”sorry no name”}
例子:
写一脚本,接受一个用户名为参数;
(1) 如果用户的id号为0,则显示其为管理员;
(2) 如果用户的id号大于0且小于500, 则显示其为系统用户;
(3) 否则,则显示其为普通用户;
#!/bin/bash
2
3 USERNAME=$1
4
5 USERID=`id
-u ${USERNAME}`
6 [ -z
${USERID} ] && exit 4
7
8 if [
${USERID} -eq 0 ];then
9 echo “systemadmin.”
10 elif [
${USERID} -gt 0 -a ${USERID} -lt 1000 ];then
11 echo “system user.”
12 else
13 echo “common user.”
14 fi
原创文章,作者:yaobinbin,如若转载,请注明出处:http://www.178linux.com/73496
评论列表(1条)
主要介绍了一些shell编程的基础用法,内容总结的非常详细,建议你把代码放入到”插入程序代码”中去,那样的话效果会好一些的!