鸟哥私房菜基础笔记

(1)变量

1. 变量与变量内容以一个等号“=”来链接,如下所示:
“myname=VBird”
2. 等号两边不能直接接空白字符,如下所示为错误:
“myname = VBird”或“myname=VBird Tsai”
3. 变量名称只能是英文字母与数字,但是开头字符不能是数字,如下为错误:
“2myname=VBird”
4. 变量内容若有空白字符可使用双引号“"”或单引号“'”将变量内容结合起来,但
双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:
“var="lang is $LANG"”则“echo $var”可得“lang is zh_TW.UTF-8”
单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:
“var='lang is $LANG'”则“echo $var”可得“lang is $LANG”
5. 可用跳脱字符“ \ ”将特殊符号(如 [Enter], $, \, 空白字符, '等)变成一般字符,如:
“myname=VBird\ Tsai”
6. 在一串指令的执行中,还需要借由其他额外的指令所提供的信息时,可以使用反单引号“`指令`”或 “$(指令)”。特别注意,那
个 ` 是键盘上方的数字键 1 左边那个按键,而不是单引号! 例如想要取得核心版本的设置:
“version=$(uname -r)”再“echo $version”可得“3.10.0-229.el7.x86_64”
7. 若该变量为扩增变量内容时,则可用 "$变量名称" 或 ${变量} 累加内容,如下所示:
“PATH="$PATH":/home/bin”或“PATH=${PATH}:/home/bin”
8. 若该变量需要在其他子程序执行,则需要以 export 来使变量变成环境变量:
“export PATH”
9. 通常大写字符为系统默认变量,自行设置变量可以使用小写字符,方便判断 (纯粹依照使用者兴趣与嗜好) ;
10. 取消变量的方法为使用 unset :“unset 变量名称”例如取消 myname 的设置:
“unset myname”


export 将变量变成环境变量
当启动一个 shell,操作系统会分配一记忆区块给 shell 使用,此内存内之变量可让子程序取用
若在父程序利用 export 功能,可以让自订变量的内容写到上述的记忆区块当中(环境变量);
当载入另一个 shell 时 (亦即启动子程序,而离开原本的父程序了),子 shell 可以将父 shell 的环境变量所在的记忆区块导入自
己的环境变量区块当中

在一般的情况下,如果你想要进入上述的目录得要“cd /cluster/server/work/taiwan_2015/003/”, 以鸟哥自己的案例
来说,鸟哥跑数值模式常常会设置很长的目录名称(避免忘记),但如此一来变换目录就很麻烦。 此时,鸟哥习
惯利用下面的方式来降低指令下达错误的问题:
[dmtsai@study ~]$ work="/cluster/server/work/taiwan_2015/003/"
[dmtsai@study ~]$ cd $work

(2)read 读取键盘输入

要读取来自键盘输入的变量,就是用 read 这个指令了。这个指令最常被用在 shell script 的撰写当中, 想要跟使用者对
谈?用这个指令就对了。关于 script 的写法,我们会在第十三章介绍,下面先来瞧一瞧 read 的相关语法吧
read [-pt] variable
选项与参数:
-p :后面可以接提示字符!
-t :后面可以接等待的“秒数!”这个比较有趣~不会一直等待使用者啦!

(3)变量别买 alias
命令别名设置: alias, unalias
alias lm='ls -al | more'
unalias lm

bash 的进站与欢迎讯息: /etc/issue, /etc/motd
CentOS Linux 7 (Core) (terminal: tty3)
Date: 2015-07-08 17:29:19
Kernel 3.10.0-229.el7.x86_64 on an x86_64
Welcome!
注意,tty3 在不同的 tty 有不同显示,日期则是再按下 [enter] 后就会所有不同。
答:
很简单,用 root 的身份,并参考上述的反斜线功能去修改 /etc/issue 成为如下模样即可(共五行):
\S (terminal: \l)
Date: \d \t
Kernel \r on an \m
Welcome!

您想要让使用者登陆后取得一些讯息,例如您想要让大家都知道的讯息, 那么可以将讯息加入 /etc/motd 里面
去!例如:当登陆后,告诉登陆者, 系统将会在某个固定时间进行维护工作,可以这样做 (一定要用 root 的身份才能修改喔!):
[root@study ~]# vim /etc/motd
Hello everyone,
Our server will be maintained at 2015/07/10 0:00 ~ 24:00.
Please don't login server at that time. ^_^

配置文件信息的文件
/etc/profile  和   ~/.bash_profile

source :读入环境配置文件的指令 ,source 配置文件文件名

管道命令:|,例如 ls -al /etc | less
在每个管线后面接的第一个数据必定是“指令”喔!而且这个指令必须要能够接受 standard input 的数据才行,这样的指令
才可以是为“管线命令”,例如 less, more, head, tail 等都是可以接受 standard input 的管线命令啦。至于例如 ls, cp, mv 等就不是管线
命令了!因为 ls, cp, mv 并不会接受来自 stdin 的数据。 也就是说,管线命令主要有两个比较需要注意的地方:
管线命令仅会处理 standard output,对于 standard error output 会予以忽略
管线命令必须要能够接受来自前一个指令的数据成为 standard input 继续处理才行。

(4)grep

grep [-acinv] [--color=auto] '搜寻字串' filename
选项与参数:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 '搜寻字串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字串' 内容的那一行!
--color=auto :可以将找到的关键字部分加上颜色的显示喔!

(5)SHELL


$# :代表后接的参数“个数”,以上表为例这里显示为“ 4 ”;
$@ :代表“ "$1" "$2" "$3" "$4" ”之意,每个变量是独立的(用双引号括起来);
$* :代表“ "$1c$2c$3c$4" ”,其中 c 为分隔字符,默认为空白键, 所以本例中代表“ "$1 $2 $3 $4" ”之意。

if [ 条件判断式 ]; then
当条件判断式成立时,可以进行的指令工作内容;
fi <==将 if 反过来写,就成为 fi 啦!结束 if 之意!

# 多个条件判断 (if ... elif ... elif ... else) 分多种不同情况执行
if [ 条件判断式一 ]; then
当条件判断式一成立时,可以进行的指令工作内容;
elif [ 条件判断式二 ]; then
当条件判断式二成立时,可以进行的指令工作内容;
else
当条件判断式一与二均不成立时,可以进行的指令工作内容;
fi

多个条件判断式:
[ "${yn}" == "Y" -o "${yn}" == "y" ]
上式可替换为
[ "${yn}" == "Y" ] || [ "${yn}" == "y" ]


case $变量名称 in <==关键字为 case ,还有变量前有钱字号
"第一个变量内容") <==每个变量内容建议用双引号括起来,关键字则为小括号 )
程序段
;; <==每个类别结尾使用两个连续的分号来处理!
"第二个变量内容")
程序段
;;
*) <==最后一个变量内容都会用 * 来代表所有其他值
不包含第一个变量内容与第二个变量内容的其他程序执行段
exit 1
;;
esac <==最终的 case 结尾!“反过来写”思考一下!

函数功能
function fname() {
程序段
}

while [ condition ] <==中括号内的状态就是判断式
do <==do 是循环的开始!
程序段落
done <==done 是循环的结束
while 的中文是“当....时”,所以,这种方式说的是“当 condition 条件成立时,就进行循环,直到 condition 的条件不成立
才停止”的意思。
还有另外一种不定循环的方式:
until [ condition ]
do
程序段落
done
这种方式恰恰与 while 相反,它说的是“当 condition 条件成立时,就终止循环, 否则就持续进行循环的程序段

for的固定循环
for var in con1 con2 con3 ...
do
程序段
done
以上面的例子来说,这个 $var 的变量内容在循环工作时:
1. 第一次循环时, $var 的内容为 con1 ;
2. 第二次循环时, $var 的内容为 con2 ;
3. 第三次循环时, $var 的内容为 con3 ;

for (( 初始值; 限制值; 执行步阶 ))
do
程序段
done
这种语法适合于数值方式的运算当中,在 for 后面的括号内的三串内容意义为:
初始值:某个变量在循环当中的起始值,直接以类似 i=1 设置好;
限制值:当变量的值在这个限制值的范围内,就继续进行循环。例如 i<=100;
执行步阶:每作一次循环时,变量的变化量。例如 i=i+1。

猜你喜欢

转载自blog.csdn.net/oXiaoXue123456789/article/details/81632471
今日推荐