3、输入重定向
#wc[选项] [文件名]
选项:
-c 统计字节数
-w 统计单词数
-l 统计行数
命令<文件 把文件作为命令的输入
10.3.4 Bash基本功能-多命令顺序执行与管道符
1、多命令顺序执行
多命令执行符 |
格式 |
作用 |
: |
命令1:命令2 |
多个命令顺序执行,命令之间没有任何逻辑联系 |
&& |
命令1&&命令2 |
逻辑与
当命令1正确执行,则命令2才会执行 当命令1执行不正确,则命令2不会执行 |
|| |
命令1||命令2 |
逻辑或
当命令1执行不正确,则命令2才会执行 当命令1执行正确,则命令2不会执行 |
例子:
#ls ; date ; cd /user ;pwd
#dd if=输入文件 of=输出文件 bs=字节数 count=个数
选项:
if=输入文件 指定源文件或源设备
of=输出文件 指定目标文件或目标设备
bs=字节数 指定一次输入/输出多少字节,即把这些字节看做一个数据块
count=个数 指定输入/输出多少个数据块
例子:
#date :dd if=/dev/zero of=/root/testfilebs=1k count=100000 ; date
#ls anaconda-ks.cfg && echo yes
#ls /root/test || echo no
#命令 && echo yes || echo no
2、管道符
命令格式:
#命令1 | 命令2
#命令1的正确输出作为命令2的操作对象
颜色显示
例;
#ll -a /etc/ | more
#netstat -an |grep "ESTABLISGED"
#grep [选项]“搜索内容”文件名
选项:
-i: 忽略大小写
-n: 输出行号
-v: 反向查找
--color=auto 搜索出的关键字用颜色显示
10.3.5 Bash基本功能-通配符和其他特殊符号
1、通配符
通配符 |
作用 |
? |
匹配一个任意字符 |
* |
匹配0个或任意多个字符,也就是可以匹配任何内容 |
[] |
匹配中括号中任意一个字符。例如:[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c。 |
[-] |
匹配中括号中任意一个字符,-代表一个范围。例如[a-z]代表匹配一个小写字母。 |
[] |
逻辑非,表示匹配不是中括号内的一个字符。例如:[^0-9]代表匹配一个不是数字的字符。 |
#cd /tmp/
#rm -rf
#touchabc
#touch012
#touch0abc
#ls?abc
#ls[0-9]*
#ls[^0-9]*
2、Bash 中其他特殊符号
符号 |
作用 |
’’ |
单引号。在单引号中所有的特殊符号,如“$”和“‘”(反引号)都没有特殊含义。 |
"" |
双引号。在双引号中特殊符号都没有特殊含义,但是“$”、“‘”和“\”是例外,拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义。 |
‘‘ |
反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。和$()作用一样,不过推荐使用$(),因为反引号非常容易看错。 |
$() |
和反引号作用一样,用来引用系统命令。 |
# |
在Shell脚本中,#开头的行代表注释。 |
$ |
用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值。 |
\ |
转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出“$”符号,而不当做是变量引用。 |
单引号与双引号
#name=sc
#echo‘$name‘
#echo"$name"
#echo‘$(date)‘
#echo"$(date)"
反引号与$()
#echo ‘ls‘
#echo $(date)
10.4.1 Bash变量-用户自定义变量
1、什么是变量
变量是计算机内存的单元,其中存放的值可以改变。当Shell脚本需要保存一些信息时,如一个文件名或一个数字,就把它存放在一个变量中。每个变量有一个名字,所有很容易引用它。使用变量可以保存有用信息,使系统获知用户相关设置,变量也可以用于保存暂时信息。
2、变量设置规则
变量名称可以由字母、数字和下划线组成,但是不能以数字开头。如果变量名是“2name”则是错误的。
在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型。
变量用等号连接值,等号左右两侧不能有空格。
变量的值如果有空格,需要使用单引号或双引号包括。
在变量的值中,可以使用“\”转义符。
如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包括“$变量名”或用${变量名}包括。
如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包括命令。
环境变量名建议大写,便于区分。
3、变量分类
用户自定义变量
环境变量:这种变量中主要保存的是和系统操作环境相关的数据。
位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
4、本地变量
变量定义
#name="shen chao"
变量叠加
#aa=123
#aa="$aa"456
#aa=${aa}789
变量调用
#echo $name
变量查看
#set
变量删除
#unset name
10.4.2 Bash变量-环境变量
1、环境变量是什么
用户自定义变量只在当前的Shell中生效,而环境变量会在当前Shell和这个Shell的所有子Shell当中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的Shell中生效
2、设置环境变量
exprot 变量名=变量值
#申明变量
env
#查询变量
unset变量名
#删除变量
PS1:定义系统提示符的变量
\d:显示日期,格式为“星期月 日”
\h:显示简写主机名。如默认主机名“localhost”
\t:显示24小时制时间,格式为“HH:MM:SS”
\T:显示12小时制时间,格式为“HH:MM:SS”
\A:显示24小时制时间,格式为“HH:MM”
\u:显示当前用户名
\w:显示当前所在目录的完整名称
\W:显示当前所在目录的最后一个目录
\#:执行的第几个命令
\$:提示符。如果是root用户会显示提示符为“#”,如果是普通用户会显示提示符为“$”
3、 系统常见环境变量
PATH:系统查找命令的路径
#echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:
/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PATH="$PATH":/root/sh
#PATH变量叠加
举例:
#PS1=‘[\[email protected]\t \w]\$‘
#PS1=‘[\[email protected]\@ \h \# \W]\$‘
#PS1=‘[\[email protected]\h \W]\$
10.4.3 Bash 变量-位置参数变量
1、位置参数变量
位置参数变量 |
作用 |
$n |
N为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}. |
$* |
这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体 |
[email protected] |
这个变量也代表命令行中所有的参数,不过[email protected]把每个参数区分对待 |
$# |
这个变量代表命令行中所有参数的个数 |
例子1:
#!/bin/bash
num1=$1
num2=$2
sum=$(($sum1+$sum2))
#变量sum的和是num1加num2
echo $sum
#打印变量sum的值
例子2:
#!/bin/bash
echo "A total of $# parameters"
#使用$#代表所有的参数
echo "The parameters is $*"
#使用$*代表所有的参数
echo "The parameters is:[email protected]"
$使用[email protected]也代表所有参数
例子3:
#!/bin/bash
for i in "$*"
#$*中的所有参数看成是一个整体,所以这个for循环只会循环一次
do
echo "The parameters is:$i"
done
x=1
for y in "[email protected]"
#[email protected]中的每个参数都看成是独立的,所以"[email protected]"中有几个参数,就会循环几次
do
echo "The parsmeter$x is:$y"
x=$(( $x +1 ))
done
10.4.4 Bash变量-预定义变量
1、预定义变量
预定义变量 |
作用 |
$? |
最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确支持;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。 |
$$ |
当前进程的进程号(PID) |
$! |
后天运行的最后一个进程的进程号(PID) |
#!/bin/bash
#Author: shenchao (E-mail:[email protected])
echo "The current process is $$"
#输出当前进程的PID
#这个PID就是variable.sh这个脚本执行时,生成的进程的PID
find /root -name hello.sh &
#使用find命令在root目录下查找hello.sh文件
#符号&的意思是把命令放入后天执行,工作管理我们在系统管理章节
会详细介绍
echo "The last one Daemon process is $!"
#!/bin/bash
#Author: shenchao (E-mail:[email protected])
read -t 30 -p "Please input your name:" name
#提示“请输入姓名”并等待3-秒,把用户的输入保存入变量name中
echo "Name is $name "
read -s -t 30 -p "Please enter your age: " age
#年龄是隐私,所以我们用“-s”选项隐藏输入
echo "Age is $age "
echo -e "-n"
read -n l -t 30 -p "Please select your gender[M/F]: "gender
#使用“-n l”选项只接收一个输入字符就会执行 (都不用输入回车)
echo -e "\n"
echo "Sex is $gender"
2、接收键盘输入
#read [选项] [变量]
选项:
-p“提示信息”: 在等待read输入时,输出提示信息
-t 秒数: read命令会一直等待用户输入,使用此选项可以指定等待时间
-n字符数: read命令只接受指定的字符数,就会执行
-s: 隐藏输入的数据,适用于机密信息的输入
10.5.1 数值运算与运算符
1、declare生命变量类型
#declare [+/-][选项] 变量名
选项:
-: 给变量设定类型属性
+: 取消变量的类型属性
-i: 将变量声明为整数型 (integer)
-x: 将变量声明为环境变量
-p: 显示指定变量的被声明的类型
2、数值运算--方法1
#aa=11
#bb=22
#给变量aa和bb赋值
#declare -i cc=$aa+$bb
方法2:expr或let数值运算工具
#aa=11
#bb=22
#给变量aa和变量bb赋值
#dd=$(expr $aa + $bb)
#dd的值是aa和bb的和。注意“+”号左右两侧必须有空格
方法3:“$((运算式))”或“$[运算式]”
#aa=11
#bb=22
#ff=$(($aa+$bb))
#gg=$[$aa+$bb]
3、运算符
优先级 |
运算符 |
说明 |
13 |
-,+ |
单目负、单目正 |
12 |
!,~ |
逻辑非、按位取反或补码 |
11 |
*,/,% |
乘、除、去模 |
10 |
+,- |
加、减 |
9 |
<<,>> |
按位左移、按位右移 |
8 |
< =, > =, < , > |
小于或等于、大于或等于、小于、大于 |
7 |
== , != |
等于、不等于 |
6 |
& |
按位与 |
5 |
按位异或 |
|
4 |
| |
按位或 |
3 |
&& |
逻辑与 |
2 |
|| |
逻辑或 |
1 |
=,+=,-=,*=,/=,%=,&=, ^=, |=, <<=, >>= |
赋值、运算且赋值 |
例子:
#aa=$(( (11+3)*3/2 ))
#虽然乘和除的优先级高于加,但是通过小括号可以调整运算优先级
#bb=$(( 14%3 ))
#14不能被3整除,余数是2
#cc=$(( 1 && 0 ))
#逻辑与运算只有想与的两边都是1,与的结果才是1,否则与的结果是0
10.5.2 Bash变量-变量测试与内容替换
变量置换方式 |
变量y没有设置 |
变量y为空值 |
变量y设置值 |
x=${y-新值} |
x=新值 |
x为空 |
x=$y |
x=${y:-新值} |
x=新值 |
x=新值 |
X=$y |
x=${y+新值} |
x为空 |
x=新值 |
x=新值 |
x=${y:+新值} |
x为空 |
x 为空 |
x=新值 |
x=${y=新值} |
x=新值 y=新值 |
x为空 y值不变 |
x=$y y值不变 |
x=${y:=新值} |
x=新值 y=新值 |
x=新值 y=新值 |
x=$y y值不变 |
x=${y?新值} |
新值输出到标准错误输出(就是屏幕) |
x为空 |
x=$y |
x=${y:?新值} |
新值输出到标准错误输出 |
新值输出到标准错误输出 |
x=$y |
例子: 测试x=${y-新值}
#unset y
#删除变量y
#x=${y-new}
#进行测试
#echo $x
new
#因为变量y不存在,所以x=new
10.6.1 环境变量配置文件简介
1、source命令
#source 配置文件 或
#. 配置文件
2、环境变量配置文件简介
环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,比如PATH、HISTSIZE、PS1、HOSTNAME等默认环境变量。
/etc/profile-----------是针对所有用户生效
/etc/profile.d/*.sh--是针对所有用户生效
~/.bash_profile-------是针对与用户的变量
~/.bashrc---------------是针对于用户的变量
/etc/bashrc-------------是针对所有用户生效