SHELL 编程
给你权限越高,就越危险,操作就越是要谨慎。
Shell 是一个用C语言编写的程序,是用户使用Linux的桥梁
Shll程序设计语言:编写SHELL脚本,用户系统管理工作
命令语言:交互解释和执行用户输入命令
种类:
Bourne shell (sh bash)
C shell (csh tcsh)
Korn shell (ksh)
Shell命令的两种形式
内部命令: cd echo 实现功能比较简单,代码量比较少,占用资源少
外部命令: cp rm 实现功能比较复杂
查看命令类型 type command
系统加电–>
初始化文件
登录shell
交互式非登录shell 比如通过命令shell
非交互式shell
登录shell
首先登录shell 执行 /etc/profile 系统级配置文件
~/.bash_profile ~/.bash_login ~/.profile 执行用户配置文件,只要其中 之一一个被执行了,其余的就不执行了。
~/.bash_logout 退出时执行。
交互式非登录shell
我们使用的终端就是shell
并不执行登录shell 里面的文件,但是继承了登录shell,所以也就是相当于全部都执 行了
/etc/bashrc
~/.bashrc 改此文件可以修改我们的看见的终端的命令行的那提示符 ~/emsd1302/0715-0719/day05$
想改的内容:PS1=”youname”
非交互式shell
并不执行前面描述的初始化文件中的命令,继承了登录shell设置的shell变量
查找环境变量env, 并执行有该变量命名文件中的命令 eg:写一条脚本 然后执行 bash first.sh 这样我们就执行了一个bash然后就退出了。这也就是说执行 了之后就死掉了
shell 编程
只有弱类型,如字符型
局部变量:只在当前shell中存在的变量,而由其它的shell启动的程序不能使用该变 量 新开一个终端是没用的,启动一个子shell也是没用的
环境变量:shell的任何子进程都能访问的变量,许多程序要正确运行都需要使用环境变 量
shell变量:shell设置的特殊变量,也是shell正确运行所必须的
定义用户变量
变量名=变量值 var=hello
可包含、“字母”、”下划线“、”数字“ 以字母和数字开头 数字打头为shell默认 使用
unset 释放变量,清楚变量
set 查看所有变量
readonly 制定变量为只读,unset不能释放
环境变量
一般用大写字母作为环境变量
系统设置像ls这样的命令一样,我们可以使用ls就是因为环境变量配置好了,如果不配 置好我们就得使用绝对路径看
shell 变量
例如 $$ 系统已经设置好了的。
环境变量设置
加上export 把其设置为环境变量 定义的是用户级别的 在另外一个shell也是可以查看的
可以用env查看所有的环境变量 清楚用unset
常用环境变量
HOME: 保存注册目录
PATH:保存用冒号分隔的目录路径名
TERM:终端了行Xterm 图形终端 linux 文本终端
UID:当前用户的标识符,取值是由数字构成的字符串
PWD:当前工作目录的绝对路径名,该变量的取值随cd命令的使用而变化
PS1:主提示符,# $
PS2:辅助提示符,在输入行末尾“\”输出该提示符 echo $PS2 = >
IFS:shell制定的缺省域分隔符(默认是空格) IFS=:
LOGNAME:此变量保存用户登录名
SHELL:保存缺省的SHELL
RANDOM:产生随机数 产生的随机数在一定的范围
RANDOM(max-min+1)+min
Eg:echo $(($RANDOM%(10-1+1)+1))
bash 支持一维数组
var=(element1 element2…… elementn)
var=([2]=element3 [0]=element1) 对数组进行赋值进行修改
eg:array=([5]=change5 [2]=change2) 这样就只剩下两个元素了
var [2]=element3 修改指定数组变量的值 eg:array[5]=change
使用数组${name[n/*]} eg:echo ${array[4]} 指定显示某一个
echo ${name[*]} 显示所有元素
echo ${#name[*]} 显示元素个数
echo ${name[@]} 和*基本一样 在使用echo ${array[*]}上
但是在整体赋值上array1=(“${array[*]}”)
array1=(“${array[*]}”) 赋值之后 array1的长度就是 1
而
array2=(“${array[@]}”) 赋值之后还是原来的长度
变量替换
文件名替换
变量替换
命令替换
算术替换
变量/参数 替换格式
变量=${参数:-word}——若参数为空或者未设置,用word代替参数进行替换,参数值不变
eg:
#!/bin/bash
#var1=hello
VAR=${var1:-“hello word”}
echo “The value of VAR is $VAR”
echo “The value of var $var1″
echo finished
变量=${参数:=word}——若参数为空或者未设置,用word代替参数进行替换,参数值为word
eg:
#!/bin/bash
#var1=hello
VAR=${var1:=”hello word”}
echo “The value of VAR is $var1”
echo “The value of var $VAR”
变量=${参数:? message}——若参数为空或者未设置,则message作为标准错误打印出来
eg:
#!/bin/bash
#var1=hello
VAR=${var1:?”hello word”}
echo “The value of VAR is $var1”
echo “The value of var $VAR”
变量=${参数:+word}——若参数设置了,用word代替参数进行替换,参数值不变
eg:
#!/bin/bash
var1=hello
VAR=${var1:+”hello word”}
echo “The value of VAR is $var1”
echo “The value of var $VAR”
查询匹配字符
* 匹配一个或者多个
? 匹配一个
[char] eg:[1-9] 匹配一个范围
eg:[!a] 显示不含a的文件