这几篇博文主要记录博主的Linux 学习之路,用作以后回顾和参考。大家可以选择略过也可以作参考。
(一)Linux 初步笔记
(二)Linux 进阶笔记(一)
(三)Linux 进阶笔记(二)
(四)Shell 编程进阶笔记
变量的分类:
用户自定义变量:
[变量名]=[变量值] : -> 注意两边不要有空格,如果变量中有空格需要加双引号
echo $[变量名] : -> 变量调用
[变量名]=“$[变量名]”[叠加值] : -> 变量的叠加
[变量名]=${[变量名]}[叠加值] : -> 变量的叠加
set : -> 所有变量的查看
set -u : -> 执行此命令后如果调用未声明的变量时会报错
unset [变量名] : -> 删除变量
bash 环境变量:
export [变量名]=[变量值] : -> 定义一个环境变量
env : -> 查看环境变量
环境变量与自定义变量的区别:
环境变量时全局变量,而用户自定义变量是局部变量。用户自定义的变量只在当前的Shell 中生效,环境变量会在当前Shell 和这个Shell 的子Shell 中生效。环境变量可以自定义,但是对系统生效的环境变量是固定的。
bash 语系变量:
locale : -> 查看当前系统语系
echo $LANG : -> 输出系统当前语系
相关命令:
read [选项] [变量名]
选项:
- -p “提示信息” : -> 在等待输入之前进行信息提示
- -t [秒数] : -> 在等待用户输入的时候,防止一直等待输入
- -n [字符数] : -> read 命令只接收指定的字符数,接收完成便会进行下一步
- -s : -> 隐藏输入的数据,就像终端输入用户密码一样
declare [+/-] [选项] [变量名]=[变量值]
选项:
- -:给变量设定类型属性
- +:取消变量的类型属性
- -a:将变量声明为数组
- -i:将变量声明为Integer 类型
- -x:将变量声明为环境变量,和export 作用类似
- -r:将变量声明为只读属性
declare -p : ->查询所有变量的属性
declare -p [变量名] : -> 查询指定变量的属性
一个简单的小应用实现运算:
[root@localhost ~]# declare -i a=1
[root@localhost ~]# declare -i b=2
[root@localhost ~]# declare -i sum=$a+$b
[root@localhost ~]# echo $sum
3
一:如上使用declare 将变量声明为Integer 类型再进行运算
二:使用 expr 或let 进行运算
[root@localhost ~]# a=2
[root@localhost ~]# b=3
[root@localhost ~]# c=$(expr $a + $b)
[root@localhost ~]# echo $c
5
[root@localhost ~]# let d=$a+$b
[root@localhost ~]# echo $d
5
三:” ((运算式))”或“ $[运算式]”
[root@localhost ~]# e=$(( $a + $b ))
[root@localhost ~]# echo $e
5
source [配置文件] : ->修改系统配置文件后,必须注销用户才可以生效,使用source 命令不用注销重新登录用户
. [配置文件]
正则表达式与通配符的区别:
cut 相关命令:
cut [选项] [文件名]
选项:
- -f [列号] : -> 提取第几列的数据
- -d [分隔符] : -> 指定按照指定分隔符截取数据,默认使用制表符截取数据
简单例子:
[root@localhost ~]# grep "/bin/bash" /etc/passwd
root:x:0:0:root:/root:/bin/bash
Jas:x:500:500:Jas Zhang:/home/Jas:/bin/bash
[root@localhost ~]# grep "/bin/bash" /etc/passwd | grep -v "root"
Jas:x:500:500:Jas Zhang:/home/Jas:/bin/bash
[root@localhost ~]# grep "/bin/bash" /etc/passwd | grep -v "root" | cut -f 1 -d ":"
Jas
awk 相关命令:
awk ‘[条件一]{[动作一]}[条件二]{[动作二]}…’ [文件名]
条件(Pattern ): 一般使用关系表达式作为条件
动作(Action): 一般用于格式化输出
简单示例一(没有执行条件):
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用%% 挂载点
/dev/sda5 17G 5.2G 11G 33% /
tmpfs 499M 276K 499M 1% /dev/shm
/dev/sda1 194M 28M 156M 16% /boot
/dev/sda2 2.0G 240M 1.6G 13% /home
/dev/sr0 4.0G 4.0G 0 100% /media/CentOS_6.3_Final
[root@localhost ~]# df -h | awk '{print$1 "\t" $2}'
文件系统 容量
/dev/sda5 17G
tmpfs 499M
/dev/sda1 194M
/dev/sda2 2.0G
/dev/sr0 4.0G
简单示例二(带有执行条件):
[root@localhost ~]# df -h | awk 'BEGIN{print "check begin"} {print$1 "\t" $2} END{print "check end"}'
check begin
文件系统 容量
/dev/sda5 17G
tmpfs 499M
/dev/sda1 194M
/dev/sda2 2.0G
/dev/sr0 4.0G
check end
简单示例三(FS内置对象指定分隔符,并使用BEGIN 条件)
[root@localhost ~]# cat /etc/passwd | grep "/bin/bash" | awk '{FS=":"} {print $1 "\t" $2}'
root:x:0:0:root:/root:/bin/bash
Jas x
[root@localhost ~]# cat /etc/passwd | grep "/bin/bash" | awk 'BEGIN{FS=":"} {print $1 "\t" $2}'
root x
Jas x
sed 相关命令:
sed [选项] ‘[动作]’ [文件名]
选项:
- -n :一般sed 命令会把所有的数据都输出到屏幕上,-n 只会把经过sed 命令处理后得到的数据进行输出
- -e :允许对输入数据应用多条sed 命令编辑
- -i :用sed 命令的修改结果直接修改原文件,而不再输出到屏幕
动作:
- a :追加,在当前行后追加一条或多条数据
- c :行替换
- i :插入,在当前行前插入一条或多条数据
- d :删除指定行
- p :打印输出指定的行数据
- s :字符串替换,用一个字符串代替另一个字符串
简单示例:
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用%% 挂载点
/dev/sda5 17G 5.2G 11G 33% /
tmpfs 499M 276K 499M 1% /dev/shm
/dev/sda1 194M 28M 156M 16% /boot
/dev/sda2 2.0G 240M 1.6G 13% /home
/dev/sr0 4.0G 4.0G 0 100% /media/CentOS_6.3_Final
[root@localhost ~]# df -h | sed -n '1p'
文件系统 容量 已用 可用 已用%% 挂载点
sort [选项] [文件名]
选项:
- -f :忽略大小写
- -n :以整型数值排序,默认使用字符串排序
- -r :反向排序
- -t :指定分隔符,默认的分隔符是制表符
- -k “m,n”:按照指定的字段范围进行排序
简单示例:
[root@localhost ~]# df -h | sort
/dev/sda1 194M 28M 156M 16% /boot
/dev/sda2 2.0G 240M 1.6G 13% /home
/dev/sda5 17G 5.2G 11G 33% /
/dev/sr0 4.0G 4.0G 0 100% /media/CentOS_6.3_Final
tmpfs 499M 276K 499M 1% /dev/shm
文件系统 容量 已用 可用 已用%% 挂载点
[root@localhost ~]# df -h | sort -r
文件系统 容量 已用 可用 已用%% 挂载点
tmpfs 499M 276K 499M 1% /dev/shm
/dev/sr0 4.0G 4.0G 0 100% /media/CentOS_6.3_Final
/dev/sda5 17G 5.2G 11G 33% /
/dev/sda2 2.0G 240M 1.6G 13% /home
/dev/sda1 194M 28M 156M 16% /boot
[root@localhost ~]# df -h | sort -n -k "5,5"
文件系统 容量 已用 可用 已用%% 挂载点
tmpfs 499M 276K 499M 1% /dev/shm
/dev/sda2 2.0G 240M 1.6G 13% /home
/dev/sda1 194M 28M 156M 16% /boot
/dev/sda5 17G 5.2G 11G 33% /
/dev/sr0 4.0G 4.0G 0 100% /media/CentOS_6.3_Final
wc 统计命令:
wc [选项] [文件名]
选项:
- -l :只统计行数
- -w :只统计单词数
- -m :只统计字符数
简单用例(一):判断当前用户是不是root
[root@localhost ~]# echo $USER
root
[root@localhost ~]# vim test.sh
#!/bin/bash
test=$USER
if [ "$test" == "root" ]
then
echo "I'm root"
else
echo "I'm not root"
fi
[root@localhost ~]# bash test.sh
I'm root
简单用例(二):判断用户输入的字符串是不是一个目录
[root@localhost ~]# vim test.sh
#!/bin/bash
read -p "please input a dir: " dir
if [ -d "$dir" ]
then
echo "It's a dir"
else
echo "It's not a dir"
fi
[root@localhost ~]# bash test.sh
please input a dir: /root
It's a dir
[root@localhost ~]# bash test.sh
please input a dir: /root123
It's not a dir
简单用例:
[root@localhost ~]# vim test.sh
#!/bin/#!/bin/bash
# 练习 case 语句的使用
read -p "Please confirm to formate the disk (Y/N) : " input
case "$input" in
"Y") echo 'Your choosen is Y';;
"N") echo 'Your choosen is N';;
*)
echo 'Error!'
;;
esac
[root@localhost ~]# bash test.sh
Please confirm to formate the disk (Y/N) : Y
Your choosen is Y
[root@localhost ~]# bash test.sh
Please confirm to formate the disk (Y/N) : N
Your choosen is N
[root@localhost ~]# bash test.sh
Please confirm to formate the disk (Y/N) : a
Error!
简单用例(求和):
[root@localhost ~]# vim test.sh
#!/bin/#!/bin/bash
sum=0
for(( i=0;i<=100;i++))
do
sum=$(( $sum+$i ))
done
echo $sum
[root@localhost ~]# bash test.sh
5050
while 与 until 语句的区别是while 中的条件判断为真时才进行循环,until 是判断条件为假时进行循环