shell_环境变量_常量_位置变量_运算(3)

2023-03-07 14:14:55 浏览数 (2)

文章目录
  • 保存永久环境变量
  • 常量
  • 位置变量
    • ln -s 源文件 连接文件
    • ls |wc -l
    • pidof
    • shift
    • $?
    • pstree -p
    • f1.sh
    • bash中的算术运算
    • bash随机数生成器
    • 随机打印字体颜色
    • 短路与&& 短路或||
    • a b 通过异或交换值
  • 习题
    • 编写脚本,统计/etc/passwd第10个用户和第20个用户的id的和
    • 比较
    • 如果磁盘空间大于80% 给出提示信息

保存永久环境变量
代码语言:javascript复制
1.root用户:

  在/etc/profile文件中添加变量【对所有用户生效(永久的)】

  并执行以下代码

  # source /etc/profile

2.普通用户:

  在用户目录下的.bash_profile或者.bashrc文件中增加变量【对单一用户生效(永久的)】
    export PS1="[e[1;32m]u@h[33[00m]:[33[01;34m]w[33[00m]$"

  并执行以下代码

  # source .bash_profile

3.短暂的环境变量:

  直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】

  在shell的命令行下直接使用[export变量名=变量值]定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。

  例如:export PATH=/usr/local/webserver/php/bin:$PATH
常量
代码语言:javascript复制
1.声明只读常量,只能声明不能修改删除
readonly name
或
declare -r name
2.exit 退出当前进程,只读环境变量消失
3.查看只读变量
declare -r
或
readonly -p
>>> UID=“1000”常量不可修改

使用场景:
pi=3.14
需要设置成固定值的常量

{}

代码语言:javascript复制
不开启shell,影响当前的环境
{ name=mage;echo $name; }
注意结尾也有;把命令当作一个整体去执行
位置变量
代码语言:javascript复制
1. $1...$10表示执行脚本时后面跟的第几个参数/脚本内部函数的参数
	1. test.sh a b c
	2. foo(){
	       echo $1
	       echo $2
	       echo $3
	   }
	   foo a b c
2. $0 : 表示当前执行脚本命令
   basename $0 :当前执行脚本的名称
3. 表示参数的个数
	$#
4. 显示输入的所有的变量
	1. $*  传递给脚本的所有参数,全部参数合为一个字符串
    2. $@ 传递给脚本的所有参数,每个参数为独立的字符串;脚本嵌套脚本使用
    区别 :
    ex:
    f1.sh
    >echo "f1.sh arg is $*"
    >f2.sh "$*"
    f2.sh
    >echo "f2.sh arg is $1"
    
    运行:./f1.sh a b c
    	>#f1.sh arg is a b c
        >#f2.sh arg is a b c
    将$*换成$@时
    	>#f2.sh arg is a
    
5.set -- 清空所有的位置参数
ln -s 源文件 连接文件
代码语言:javascript复制
arg.sh
	>echo "script name is $0"


>ln -s arg.sh link.sh
>./link.sh

>#script name is link.sh

$0显示的是当前执行脚本的名称
不能将软连接再创建软连接
ls |wc -l
代码语言:javascript复制
查看当前的文件夹的个数
pidof
代码语言:javascript复制
查找指定进程的进程号
pidoff bash
shift
代码语言:javascript复制
f1.sh
>echo "$1"
>echo "$2"
>echo "$3"
>shift 1
>echo "$1"
>echo "$2"
>echo "$3"

>#f1.sh 1 2 3

>echo "1"
>echo "2"
>echo "3"
>echo "2"
>echo "3"
将参数移除一个
shift   num
移除多个参数
$?
代码语言:javascript复制
保存最近一次的命令的执行状态(显示上一次执行命令的状态)
0:成功    1-255:失败


f1.sh                 f2.sh
>ls										>hostnam
>hostnam							>ls

>#f1.sh				
>#echo $?
	127      执行脚本时最后一条指令未执行成功就不会显示0
  				或
    			 中间有语法错误

>#f2.sh
>#echo $?
	0				最后一条指令执行成功,中间可能有未执行的指令,但中间没有语法错误	
 
f3.sh
>ls
>exit 10 :指定运行脚本结束时的状态   例:退出时的数据是10

>#f3.sh
>#echo $?
>>>10
z
pstree -p
代码语言:javascript复制
查看进程树
f1.sh
代码语言:javascript复制
#! /bin/bash 

echo "name=$name"
代码语言:javascript复制
显示进程树

	----bash----f1.sh

  
  f1.sh为bash的子进程,局部变量间的父子变量不可相互影响 不可相互传递
  
  
  >name=haha
  >./f1.sh
  ># name=
  
  
  >export name 
  >./f1.sh
  ># name=haha
bash中的算术运算
代码语言:javascript复制
>x=1
>y=2

>let z=x y
>echo z
>>>3

1.let var=x y
2.$[数字运算]  : 中括号支持数据运算
3.$((数字运算))
4.echo '算术表达式'|bc
5.var=$(expr $1   $2   ..)  
		注意:
  		中间有空格
    	乘法要转译*
6.declare -i x=10
>declare -i x=10
>declare -i y=20
>declare -i z=x y
直接声明数值
bash随机数生成器
代码语言:javascript复制
RANDOM (0-32767)

[RANDOM%6]   :  得到的是[0-5]的整数

[RANDOM%6 31] : 得到的是[0-37]的整数

> echo $[RANDOM%6]
>3    : 产生一个0-5的随机数
随机打印字体颜色
代码语言:javascript复制
31-37
$COLOR=$[RANDOM%7 31];echo -e "33[1;${COLOR}mcolor33]0m]"

或

$COLOR=$[RANDOM%7 31];echo -e "e[1;${COLOR}m colore]0m]"

-q

代码语言:javascript复制
grep -q 
unzip -q 

>echo $?

>0

-q不显示执行的结果
短路与&& 短路或||
代码语言:javascript复制
cmd1 && cmd2 
如果cmd1为假则cmd2不执行   
如果cmd1为真则cmd2执行
a b 通过异或交换值
代码语言:javascript复制
脱字符

>a=12
>b=14
> a=$[a^b];b=$[a^b];a=$[a^b];echo $a $b
>14  12

第一个(异或)a保留的相当于中间值 
习题
编写脚本,统计/etc/passwd第10个用户和第20个用户的id的和
代码语言:javascript复制
UID=`head -10 /etc/passwd|tail -1|cut -d: -f3`
比较
代码语言:javascript复制
1.字符串比较
[ str   空格 = 空格 str ]
2.数字比较
[ num1 -eq num2 ]
如果磁盘空间大于80% 给出提示信息
代码语言:javascript复制
df -h |grep "^/d[a-z]"|awk -F " " '{ print $5}'|sort -nr|head -n1|cut -d% -f1

1.取到数字 
2.取到数字过大的那一行
3.取到文件夹的路径名称

0 人点赞