Linux基础入门 --14 DAY(SHELL脚本编程基础)

面试题:为什么x和y的值为空,i和j却有value呢?

[root@localhost ~]# echo abc def | read x y ; echo x=$x ; echo y=$y
x=
y=

[root@localhost ~]# cat value 
1 2
[root@localhost ~]# read i j < value ; echo i=$i j=$j
i=1 j=2

解答:

Each command in a pipeline is executed as a separate process (i.e., in a subshell).
管道两边分别为两个独立的子进程 

解决方案:

[root@localhost ~]# echo abc def |( read x y ; echo x=$x ; echo y=$y)
x=abc
y=def
[root@localhost ~]# echo abc def |{ read x y ; echo x=$x ; echo y=$y; }
x=abc
y=def 

bash的配置文件 

bash shell 的配置文件很多,可以划分为下面类别.

按生效范围划分两类

        全局配置:

                /etc/profile        

                /etc/profile.d/*.sh

                /etc/bashrc

        个人配置:

                ~/bash_profile

                ~/.bashrc

shell登录两种方式分类

        交互式登录:

        1. 直接通过终端账号密码登录

        2. 使用 "su - UserName"切换用户

        配置文件执行顺序:

/etc/profile  -->  /etc/profile.d/*.sh -->  ~/.bash_profile  --> ~/.bashrc  --> /etc/bashrc

        非交互式登录 

        1. su UserName

        2. 图形界面下打开的终端

        3. 执行脚本

        4. 任何其他的bash实例

        执行顺序:

/etc/profile.d/*.sh  -->  /etc/bashrc --> ~/.bashrc 

按功能划分分类 

        profile类和bashrc类

        1.profile类

        profile类为交互式登录的shell提供配置

        全局:/etc/profile, /etc/profile.d/*.sh

        个人:~/.bash_profile

        功用:

        1.用于定义环境变量

        2.运行命令或脚本

        2.bashrc类

        bashrc类:为非交互式和交互式的登录的shell提供配置

        全局:/etc/bashrc

        个人:~/.bashrc

        功用:

        1.定义命令别名的函数

        2.定义本地变量

        配置文件生效

        修改profile和bashrc文件后需要生效有两种方法:

        1.重新启用shell进程

        2.source| . 配置文件

        示例:

. ~/.bashrc

        bash退出任务

        保存在~/.bash_logout文件中(用户),在退出登录shell时运行

        功能:

        1.创建自动备份

        2.清楚临时文件

流程控制

条件选择

        选择执行if语句

        格式:

if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS;  ]... [ else COMMANDS; ] fi

        单分支:

if 条件判断;then

                条件为真的分支代码

else 

                条件为假的分支代码

fi 

        双分支

if 条件判断1;then

        条件1为真的分支代码

elif 条件判断2;then

        条件2为真的分支代码

else

        条件为假的分支代码

fi       

        选择执行case语句

        格式:

 case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac

case 变量引用 in

PAT1)

        分支1

        ;;

PAT2)

        分支2

        ;;

PAT3)

        分支3

        ;;

...

*)

        默认分支

        ;;

esac 

        case支持glob风格是通配符:

*:任意长度字符串

?:任意单个字符

[ ]:指定范围内的任意单个字符

|:或,如a或b 

 

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值