Shell理论学习(三)

37.调整变量的属性

  • 只读变量:使用readonly命令

    readonly 变量名称

  • readonly其他用法
    • readonly或readonly -p:显示目前具有只读属性的变量列表
    • readonly -f 函数名称:设定该函数式不可修改
    • readonly -a 数组变量:设定-a后接的变量名是只读的数组
  • 只读变量:使用declare

38.自定义环境变量

  • 以一般用户登录时

  • 以系统管理员的角色工作时,环境变量配置文件有三个

    • /etc/profile
    • /etc/bash.bashrc
    • /etc/skel目录下的所有文件

39.Here Document

基本用法:

[[email protected] ~]#  cat >>123.txt<< end
> hello 
> my name is "jack"
> welcome to BJ
> end
You have new mail in /var/spool/mail/root
[[email protected] ~]# cat 123.txt 
hello 
my name is "jack"
welcome to BJ
  • Here Document也支持变量替换.在输入的内容中,如果有变量,bash在转向前,会先替换变量值

  • 如何在变量中使用
[[email protected] ~]# Wow=‘Wow,great!‘
[[email protected] ~]# m1=$(cat <<HERE
> line 1 is good.
> They are jack,marry and john.
> $WoW
> HERE
> )
[[email protected] ~]# echo $m1
line 1 is good. They are jack,marry and john.
  • 如何关闭变量
[[email protected] ~]# m1=$(cat <<‘HERE‘
> line 1 is good.
> They are jack,marry and john.
> $WoW
> HERE
> )
[[email protected] ~]# echo $m1
line 1 is good. They are jack,marry and john. $WoW
  • 做多行批注

40.如何测试变量是否存在

语法: ${待测变量-默认值}

解释:判断待测变量是否存在,如果变量存在,就传回变量的值,如果没有就会将默认值传给待测变量

  • 判断变量是否存在
[[email protected] ~]# unset myname
[[email protected] ~]# r=${myname-‘basher‘}
[[email protected] ~]# echo $r
basher
[[email protected] ~]# myname="Jack"
[[email protected] ~]# r=${myname-‘basher‘}
[[email protected] ~]# echo $r
Jack
  • 判断变量是否不存在或者为空
[[email protected] ~]# myname=
[[email protected] ~]# r=${myname:-‘basher‘}
[[email protected] ~]# echo $r
basher
[[email protected] ~]# unset myname
[[email protected] ~]# r=${myname:-‘basher‘}
[[email protected] ~]# echo $r
basher
  • 用if判断

  • 测试变量是否"不存在"或其值为空:提示错误信息

语法:${待测变量:?提示信息}

解释:判断变量是否"不存在"或者为"空",如果条件成立,则显示:?后的提示信息。并立即停止执行script

拆解表达式:

范例:

时间: 2024-07-31 18:54:42

Shell理论学习(三)的相关文章

2017年最新企业面试题之shell(三)

2017年最新企业面试题之shell(三) 练习题1:写一个shell脚本,类似于日志切割,系统有个logrotate程序,可以完成归档.但现在我们要自己写一个shell脚本实现归档. 举例: 假如服务的输出日志是1.log,我要求每天归档一个,1.log第二天就变成1.log.1,第三天1.log.2, 第四天 1.log.3  一直到1.log.5 脚本内容如下: #!/bin/sh function logdir () { [ -f $1 ] && rm -f $1 } for i

shell执行三种方法

查看当前shell echo $SHELL grep root /etc/passwd 开头: #!/bin/bash #!/bin/sh ls -l /bin/sh shell种类 cat /etc/shells /etc/init.d/nfs /etc/init.d/crond /etc/init.d/rc.d/rc.sysinit bash --version shell执行三种方法: 1,sh t.s 或者 shell t.s 2,/server/scripts/t.sh 或者 ./t.

启动bash shell的三种方式下,检查的启动文件

启动bash shell的三种方式 1.登录时当做默认登录shell 2.作为非登录shell的交互式shell 3.作为运行脚本的非交互shell 一.登录shell 登录Linux系统时,bash shell会作为登录shell启动,登录shell会从4个不同的启动文件里读取命令,下面是bash shell处理这些文件的次序: 1./etc/profile 2.$HOME/.bash_profile 3.$HOME/.bash_login 4.$HOME/.profile 其中/etc/pr

鸟书shell学习(三)shell脚本程序设计要点总结

一 注意事项 1.脚本的开头一行为 : #!/bin/bash 声明这个脚本需要的shell的名称 2.程序中出了"#!"之外的其他以#开头的都是注释内容 3.为了方面的使用系统命令,可以在程序的开始部分设置主要环境变量例如PATH 4.脚本程序的运行方法: sh example.sh 或者类似 bash example.sh chmod +x example.sh ; ./example.sh    ################################ 这两种执行方式都是

shell学习三十四天----printf详解

printf 先来看一个简单的例子:使用命令printf "hello,world\n", 输出:hello,world 再使用echo "hello,world\n",输出为:hello,world\n 案例二:使用命令printf "%s\n" hello,world 输出结果为:hello,world printf命令的完整语法有两个部分: printg format-string [arguments] 第一部分为描述格式规格的字符串,他

linux下用shell删除三天前或者三天内的文件

说明:+n 大于 n, -n 小于 n, n 相等于 n. find / -amin -30 -ls # 查找在系统中最后30分钟访问的文件find / -atime -2 -ls # 查找在系统中最后48小时访问的文件find / -mmin -10 -ls # 查找在系统中最后10分钟里修改过的文件find / -mtime -1 -ls # 查找在系统中最后24小时里修改过的文件find / -cmin -10 -ls # 查找在系统中最后10分钟里被改变状态的文件find / -ctim

shell学习三十天----break,continue,shift,getopts

break和continue 这两个命令分别用来退出循环,或跳到循环体的其他地方. 使用while与break,等待用户登录 bash代码: printf "Enter username: " read user while true do if who | grep "$user" >/dev/null then break; fi sleep 30 done 等待特定用户,每30秒确认一次 true命令什么事也不必做,只是成功的退出.这用于编写无限循环,即

Shell理论学习(一)

登录主机: 本机登录(7个接口tty1~tty7) 文本接口(tty1~tty6) 图形接口(tty7) 远程登录 通配符: *:代表任意的字符串,可以是空字符串 ?:代表一个字符,但是不可以为空 转义字符:\ 续行符号:\ 字符集合: [a-z]:英文小写字母 [A-Z]:英文大写字母 [a-zA-Z]:英文大小写字母 [0-9]:数字 [a-zA-Z0-9]:英数字 [xyz]:x,y或是z 括号扩展:{} {g,nc,s}ftp即:gftp,ncftp,sftp 检查script的语法:b

shell学习三十五天----波浪号展开与通配符

波浪号展开与通配符 shell中两种与文件名相关的展开.第一种是波浪号展开,第二种是通配符展开式. 波浪号展开 如果命令行字符串的第一个字符为波浪号(~),或者变量指定(例如PATH或CDPATH变量)的值里任何未被引号括起来的冒号之后的第一个字符为波浪号(~)时,shell变回执行波浪号展开. 波浪号展开的目的,将用户根目录的符号型表示方式,改为实际的目录路径.可以采用直接或间接的方式指定执行此程序的用户,如未明白指定,则为当前的用户: 命令:vi ~/.profile       与vi $