shell脚本学习第一章
shell脚本的开发周期:
- 在命令行上测试,
- 放入独立的脚本,
- 设置权限
例如:
1 |
|
- shell 会沿着路径$PATH(环境变量)来寻找命令
$PATH是一个以冒号分割的目录列表echo $PATH
- 自己的脚本最好用自己的
bin
目录来存放,通过加入到$PATH
中的列表来让shell
自动找到它们 - 写脚本第一句话
#!/bin/bash
表示此脚本用什么解释器来解释,#!
是特殊标识符
变量(
variable
)直接赋值
myvar=this_is_a_long_string_that_does_not_mean_much
中间有空格需要引号
取出变量的值需要在变量名称前面加上
$\$$
字符变量给变量赋值
oldname=$first
加
""
使得字符串变量连接起来fullname="$first $second $third"
echo $fullname
访问shell脚本的参数
who | grep root
将此命令放入脚本中,抽象成参数,那么每次都能快速查到到who
中的某位用户echo first argument is $1
echo tenth argument is ${10}
参数超过9要将数字框起来1
2
3
4
5
6
7cat > finduser
#! /bin/sh
# 查询用户登录
who | grep $1
chmod +x finduser #脚本权限
./finduser root #执行脚本命令的执行跟踪(
execution tracing
)sh -x nusers(这是个脚本文件)
在脚本里,用set -x
打开执行跟踪功能set +x
关闭
例如:1
2
3
4
5
6
7
8
9
10cat > trace1.sh
#! /bin/sh
set -x
echo 1st echo
set +x
echo 2nd echo
执行:
chmod +x trace1.sh
./trace1.sh可以看到命令被打印出来
1.echo
输出
echo -e "a\tb\n"
激活转义字符echo -e "\e[0;31mThis is red text\e[0m"
\e[1;31m
颜色码:重置=0,31m xxm
等\e[0m
数字参数:0关闭所有属性,1 设置高亮…- echo -n “Enter your name” 省略换行符
以
|
建立管道,program1 | program2
可将program1
的标准输出作为program2
的标准输入特殊文件
/dev/null
位桶
bit bucket
,传送到此文件的数据都会被操作系统丢掉chmod 755 /tmp/hello.sh
赋予权限/tmp/hello
绝对路径直接运行/bin/bash /tmp/hello.sh
bash /tmp/hello.sh
history
:历史命令记录history -c
清空历史命令history -w
将缓存中的命令写入历史命令保存文件
保存文件路径:~/.bash_history
vim /root/.bash_history
查看历史命令
历史命令的调用
!n
执行第n条命令!!
执行上一条命令命令与文件补全
Tab
键自动补全命令别名
alias
查看别名.alias vi='vim'
暂时更改别名(关机之前)/root/.bashrc
,alias
保存文件
shell
自带命令没有执行文件whereis ls
whereis cd
rc : run commands:从档案中取出一系列命令来执行的功能
任何脚本类文件的后缀
bash常用快捷键
ctrl+c
强行中止当前命令ctrl+l
==clear
ctrl+u
剪切光标之前的内容ctrl+k
剪切光标之后的内容ctrl+y
粘贴
输入输出重定向
linux
中输入输出重定向符号挺简单的,
- 正确重定向输出
ls -l > log11
覆盖的方式写入文件ls -l >> log11
追加的方式写入文件
- 错误输出重定向
lst 2> log11
覆盖lst 2>> log11
追加
- 同时保存错误输出和正确输出
命令 > 文件 2>&1
list > log11 2>&1
覆盖list >> log11 2>&1
追加
命令 &> 文件
ls -l / &> log11
覆盖ls -l / &>> log11
追加
命令 >文件1 2>文件2
正确的覆盖到文件1,错误的覆盖到文件2(分开写入文件)
ls -l /sys >log1 2>log2
ls -l /etc /dev >log1 2>>log2
- 自己组合
- 去除无效输出
- 背景:写脚本时不希望看到有输出
ls &> /dev/null
:不存在/dev/null
这个文件,等价于回收站
备注:
wc
:统计文本 行数,单词数,字节,字符word line character ans byte count
wc /tmp/sh/log1
缺省顺序:行数,单词数,字符数-l line
行数-w word
单词数-c char
字符数wc -lwc log1 == wc log1
-m bytes
字节数
- 多命令顺序执行(3种情况)
a;b
同时执行,错误命令报错,不影响后续命令a && b
逻辑与,第一个正确才能执行下面一个a||b
异或的关系,只能执行第一个对的,
grep
:globe search regular expression and print out the line
(全局搜索正则表示式并打印)grep "xxx" filename
grep xxx filename
-n
行数--color=auto
关键字颜色
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!