Bash与shell脚本
1.Bash的功能
1)命令行编辑的功能
ctrl+a:跳到命令行行首
ctrl+e:跳到命令行行尾
ctrl+u:删除从光标开始到行首的内容
ctrl+k:删除从光标开始到行尾的内容
ctrl+左右箭头:跳过一个单词
2)文件名统配
通配符:*:(0到无穷多个)任意长度的任意字符
?: 任意单个字符
[]: 匹配指定范围内的任意单个字符。如[a-z]匹配a-z中的任意一个
^: 取反。例如[^0-5]不含有0-5的任意一个数字。
[:keyword:]:[:lower:],[:upper:],[:punct:],[:space:],[:digit:],
[:alapha:],[:alnum:]
3)命令补全和路径补全的功能
按一次tab键可以补全命令或文件名,若按一次,没有补全,再按一次tab,会将以你刚才输的内容相匹配的全部显示出来。如果你按了一次tab键,没有补全,又按了一次tab键,也没有显示,则说明你输入的内容出错了,仔细检查一下。
4){}展开
用{}展开来创建目录
例如: 我想在当前目录下创建x/y,x/z,x/z/1,x/z/2
mkdir -Pv x/{y,z/{1,2}}
再例如:我想在当前目录下创建x_1,y_1,x_2,y_2
mkdir -Pv {x,y}_{1,2}
5)命令扩张
命令引用:$(), 反引号``
例如:mkdir $(date "+%H:%M:%S")
ls -l `which passwd`
2.变量:命名的内存空间
变量的赋值:变量名=变量内容
set 变量名=变量内容
变量输出 echo $变量名
变量的引用:双引号和单引号
双引号是弱引用,可以进行变量的替换
单引号是强引用,不会进行变量的替换
例如:使用双引号
name=hanlenry
myname="my name is $name"
echo $myname
结果是my name is hanlenry
而使用单引号
name=hanlenry
myname='my name is $name'
echo $myname
使用单引号的结果是my name is $name
取消变量:unset 变量名
例如: unset name
3.编程语言分为脚本语言和编译型语言
脚本语言特点:1)以源程序的方式存在,执行前不需要编译,而是靠一个解释器解释执行
2)维护简便
3)执行效率差
脚本语言:bash,perl,python,ruby,php
编译型语言:
编辑->编译->链接->运行
编译型语言:C,C++
脚本:命令的堆砌
写脚本时,第一行必须要写#!/bin/bash
4.编写脚本
1)编写一个简单的脚本显示Hello World!
在当前目录下用nano编辑一个文件叫 hello.sh
#!/bin/bash
echo -e "Hello World!"
编写完成后,修改这个文件的权限chmod a+x hello.sh,然后执行./hello.sh
2)写一个脚本
复制/etc/skel目录至/home,并且重命名为centos
设定此目录及其内部文件或子目录的属主属组为redhat用户,redhat组
设定此目录及其内部文件或子目录的权限为属组和其他用户没有任何权限
修改redhat用户的家目录为/home/centos
nano script.sh
#!/bin/bash
cp -Pv /etc/skel /home/centos
ls -lhd /home/centos
chmod -R redhat:redhat /home/centos
ls -lhd /home/centos
chmod -R go=--- /home/centos
ls -lhd /home/centos
usermod -d /home/centos redhat
cat /etc/passwd
编写完成后,修改这个文件的权限chmod a+x script.sh,然后执行./script.sh
阅读(1443) | 评论(0) | 转发(0) |