shell主要作用,帮助管理员简化管理操作
变量
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
但是和别的编程语言不同的是:
shell变量的默认类型是字符串
哪怕a=123
shell也会认为是”123”
shell的变量可以分为三类
- 用户自定义变量
- 环境变量
- 预定义变量
一, 用户自定义变量
语法: 变量名称=变量值
name=”节操”
跟其他变成语言不一样的是等号=, 两边不能有空格
调用变量
$变量名
echo $name
echo:输出到屏幕
调用变量要在变量名前加 "$"
在原变量后面再追加,有两种写法
x=123
x="$x"456
x=${x}789
set命令
查看系统中所有已经生效的变量
删除变量
unset 变量名
变量名前不用加$符
二,环境变量
环境变量和用户自定义变量之间有什么区别呢
环境变量是全局变量,只在当前的shell和子进程中生效
用户自定义变量, 只在当前shell中生效
语法
export y=34
接下来看一下系统中常用的环境变量
env 查看环境变量
HOSTNAME: —– 主机
SHELL: —– 当前的shell
TERM: —– 终端环境
HISTSIZE: —– 历史命令条数
SSH_CLIENT: —– 当前操作环境是用shell连接的,这里记录客户端ip
SSH_TTY: —– ssh连接的终端是pts/1
USER: —– 当前登录的用户
还有两个用到的比较多
PATH: 系通查找命令的路径
PS1: 命令提示符设置
我们在text目录下新建一个脚本文件hello.sh
要执行这个脚本文件有两个方法
1)增加可执行权限
vim text/hello.sh
chmod 755 text/hello.sh
text/hello.sh
2)将目录添加到环境变量(重启失效,需要写入文件)
PATH="$PATH":/root/text
hello.sh
ps1就是更改[root@localhost ~]# 用的
\d :代表日期,格式为weekday month date,例如:”Mon Aug 1”
\H :完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux
\h :仅取主机的第一个名字,如上例,则为fc4,.linux则被省略
\t :显示时间为24小时格式,如:HH:MM:SS
\T :显示时间为12小时格式
\A :显示时间为24小时格式:HH:MM
\u :当前用户的账号名称
\v :BASH的版本信息
\w :完整的工作目录名称。家目录会以 ~代替
\W :利用basename取得工作目录名称,所以只会列出最后一个目录
# :下达的第几个命令
$ :提示字符,如果是root时,提示符为:# ,普通用户则为:$
默认的PS1内容为: PS1=’[\u@\h \W]\$ ’ ,所以默认的提示符就是: [root@linux ~]#
三,预定义变量
预定义变量中还有个分类–位置参数变量
$n ---- n为数字,0代表命令本身,1-9代表第一到第九个参数,10以上用大括号包含
$* ---- 这个变量代表命令行中所有的参数,$*把所有的参数看做一个整体
$@ ---- 这个变量也代表命令行中所有的参数,$@把每个参数区分对待
$# ---- 这个变量代表命令行中所有参数的个数
例子
vim ./text/hello1.sh
#!/bin/bash
#会获取传递的前两个参数
num1=$1
num2=$2
sum=$(($num1+num2))
echo $sum
# $*将传递的参数看做一个整体,这里只循环一次
for i in "$*"
do
echo "$i"
done
# $@将传递的参数,区分对待,传递多少个,循环多少次
for i in "$@"
do
echo "$i"
done
# $#统计传递参数的个数
echo "$#"
执行脚本
chmod 755 ./text/hello1.sh
这里传递了4个参数
[root@localhost ~]# ./text/hello1.sh 10 20 30 40
30
10 20 30 40
10
20
30
40
4
预定义变量
$? : 上一个命令正确执行,返回0
$$ : 当前进程的pid
$! : 后台运行的最后一个一个进程的pid
接受键盘输入
read
-p "提示信息" 在等待read输入时,输出提示信息
-t 秒数,read命令会一直等待用户输入,此选项可以指定等待时间
-n 字符数:read命令只接受指定的字符数,就会执行
-s 隐藏输入的数据,适用于机密信息的输入
read -p "please input you name" -t 30 name
echo $name
read -p "please input you password" -s passwd