Linux--shell变量

Linux下查看shell的类别:cat /etc/shells
image.png

⚪bash

------大多数Linux系统默认使用的Shell,bash Shell是Bourne Shell 的一个免费版本,它是最早的Unix Shell,bash 还有一个特点,可以通过help命令 来查看帮助。包含的功能几乎可以涵盖Shell所具有的功能,所以一般的Shell脚本都会指定它为执行路径

一.bash的初始化

1、/etc/profile

全局(公有)配置,不管是哪个用户,登录时都会读取该文件。

2、/ect/bashrc

Ubuntu 没有此文件,与之对应的是 /ect/bash.bashrc 它也是全局(公有)的 bash 执行时,不管是何种方式,都会读取此文件。

3、~/.profile

若 bash 是以 login 方式执行时,读取 ~/.bash_profile,若它不存在,则读取 ~/.bash_login,若前两者不存 在,读取~/.profile。 图形模式登录时,此文件将被读取,即使存在 ~/.bash_profile 和 ~/.bash_login。

4、~/.bash_login

若 bash 是以 login 方式执行时,读取 ~/.bash_profile,若它不存在,则读取 ~/.bash_login,若前两者不存 在,读取 ~/.profile。

5、~/.bash_profile

Unbutu 默认没有此文件,可新建。 只有 bash 是以 login 形式执行时,才会读取此文件。通常该配置文件还会配置成去读取 ~/.bashrc。

6、~/.bashrc

当 bash 是以 non-login 形式执行时,读取此文件。若是以 login 形式执行,则不会读取此文件。

7、~/.bash_logout

注销时,且是 longin 形式,此文件才会读取。在文本模式注销时,此文件会被读取,图形模式注销时,此文 件不会被读取。

二.bash的特性

1.命令和文件自动补齐

----Linux命令自动补全需要安装bash-completion


image.png

----安装后重启系统可正常tab补齐

2.命令历史记忆功能

1.查看之前使用过的所有命令:history
2.显示最近的n个命令:history n
3.删除相应的第n个命令:history -d n
4.指定执行命令历史中的第n条语句:!n
5.指定执行命令历史中倒数第n条语句:!-n
6.执行命令历史中最后一条语句:!!
7.执行命令历史中最近一条以[String]开头的语句:![String]
8.引用上一个命令中的最后一个参数:!$
----COMMAND + Esc键 + . 输入COMMAND之后,按下Esc键,松开后再按 . 则可以自动输入最近一条语句使用的参数 
----COMMAND + Alt + . 输入COMMAND之后,同时按下Alt和. 键,也可以自动输入最近一条语句使用的参数
9.将历史命令写入命令历史的文件中:history -w
10.回显 echo 之后的语句,而使用 echo $FILENAME 命令可以查看该 file 所在的路径:echo $HISTFILE
11.查看命令历史的内容: cat .bash_history
12.删除所有的命令历史记录:history -c

3.别名功能

1.查看系统当前所有的别名:alias
2.定义新的别名,输入h5就相当于'head-5'
3.取消定义的别名:unalias h5

4.常用的快捷键

----ctrl +A:把光标移动到命令行开头。如果我们输入的命令过长,想要把光标移动到命令行开头时使用。
----ctrl +E:把光标移动到命令行结尾
----ctrl +C:强制终止当前的命令

二.shell 变量

1.含义:

用一个固定的字符串去表示不固定的内容

2.变量的类型:

自义环境变量:

  1. 方法一 export back_dir2=/home/backup
  2. 方法二 export back_dir1 将自定义变量转换成环境变量
    引用环境变量:变 量 名 或 {变量名}
    查看环境变量:echo $变量名 env 例如 env | grep back_dir2
    取消环境变量:unset 变量名
    变量作用范围:在当前Shell和子
  3. 位置变量
    12 34 56 78 9{10}
  4. 预定义变量
    $0 脚本名
    $* 所有的参数
    $@ 所有的参数
    $# 参数的个数
    $$ 当前进程的PID
    $! 上一个后台进程的PID
    $? 上一个命令的返回值 0表示成功
3.*和@的区别
# vim ping.sh 
#!/bin/bash 
ping ‐c2 $1 &>/dev/null 
if [ $? = 0 ];then 
echo "host $1 is ok" 
else
echo "host $1 is fail" 
fi
[root@qfdeu ~]# chmod a+x ping.sh 
[root@qfdeu ~]# ./ping.sh 192.168.2.25
4.变量的赋值方式
①显式赋值

变量名=变量值

ip1=192.168.1.251
school="BeiJing 1000phone"
today1=`date +%F`
today2=$(date +%F)
②read从键盘读入变量值

read 变量名
read -p "提示信息: " 变量名
read -t 5 -p "提示信息: " 变量名
• -t 后面跟秒数,定义输入字符的等待时间
read -n 2 变量名
• -n 后跟一个数字,定义输入文本的长度,很实用。

[root@qfdeu ~]# vim first.sh
back_dir1=/var/backup
read ‐p "请输入你的备份目录: " 
back_dir2 echo $back_dir1 echo 
$back_dir2 [root@qfdeu ~]# sh first.sh
[root@qfdeu ~]# vim ping2.sh 
#!/bin/bash
 read ‐p "Input IP: " ip
 ping ‐c2 $ip &>/dev/null
 if [ $? = 0 ];then 
echo "host $ip is ok" 
else
echo "host $ip is fail" 
fi
[root@qfdeu ~]# chmod a+x ping2.sh 
[root@qfdeu ~]# ./ping.sh
5.定义引用变量

----"" 弱引用
----'' 强引用

[root@qfdeu ~]# school=1000phone 
[root@qfdeu ~]# echo "${school} is good" 
1000phone is good
 [root@qfdeu ~]# echo '${school} is good' 
${school} is good

----(反引号)命令替换 等价于 $() 反引号中的Shell命令会被先执行

[root@qfdeu ~]# touch `date +%F`_file1.txt 
[root@qfdeu ~]# touch $(date +%F)_file2.txt 
[root@qfdeu ~]# disk_free3="df ‐Ph |grep '/$' |awk '{print $4}'" # 错误 
[root@qfdeu ~]# disk_free4=$(df ‐Ph |grep '/$' |awk '{print $4}') 
[root@qfdeu ~]# disk_free5=`df ‐Ph |grep '/$' |awk '{print $4}'`
6.变量"内容"的删除和替换
①"内容"的删除
[root@qfedu ~]# url=www.sina.com.cn
 [root@qfedu ~]# echo ${#url} # 获取变量值的长度 
15
[root@qfedu ~]# echo ${url} # 标准查看 www.sina.com.cn 
[root@qfedu ~]# echo ${url#*.} # 从前往后,最短匹配 
sina.com.cn 
[root@qfedu ~]# echo ${url##*.} # 从前往后,最长匹配 贪婪匹配 
cn
[root@qfedu ~]# url=www.sina.com.cn 
[root@qfedu ~]# echo ${url} www.sina.com.cn 
[root@qfedu ~]# echo ${url%.*} # 从后往前,最短匹配 
www.sina.com 
[root@qfedu ~]# echo ${url%%.*} # 从后往前,最长匹配 贪婪匹配 
www 
[root@qfedu ~]# url=www.sina.com.cn 
[root@qfedu ~]# echo ${url#a.}
www.sina.com.cn 
[root@qfedu ~]# echo ${url#*sina.} com.cn
[root@qfedu ~]# echo $HOSTNAME qfedu.1000phone.com 
[root@qfedu ~]# echo ${HOSTNAME%%.*} 
qfedu
②"内容"的替换
[root@qfedu ~]# url=www.sina.com.cn
[root@qfedu ~]# echo ${url/sina/baidu}
www.baidu.com.cn 
[root@qfedu ~]# url=www.sina.com.cn 
[root@qfedu ~]# echo ${url/n/N}
 www.siNa.com.cn 
[root@qfedu ~]# echo ${url//n/N} 贪婪匹配 
www.siNa.com.cN
③变量的替代
[root@qfedu ~]# unset var1
[root@qfedu ~]# 
[root@qfedu ~]# echo ${var1} 
[root@qfedu ~]# echo ${var1‐aaaaa}
 aaaaa 
[root@qfedu ~]# var2=111 
[root@qfedu ~]# echo ${var2‐bbbbb}
 111 
[root@qfedu ~]# 
[root@qfedu ~]# var3= 
[root@qfedu ~]# echo ${var3‐ccccc}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容