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 $1echo 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.shbash /tmp/hello.sh
history:历史命令记录history -c清空历史命令history -w将缓存中的命令写入历史命令保存文件
保存文件路径:~/.bash_historyvim /root/.bash_history查看历史命令
历史命令的调用
!n执行第n条命令!!执行上一条命令命令与文件补全
Tab键自动补全命令别名
alias查看别名.alias vi='vim'暂时更改别名(关机之前)/root/.bashrc,alias保存文件
shell自带命令没有执行文件whereis lswhereis cdrc : run commands:从档案中取出一系列命令来执行的功能任何脚本类文件的后缀
bash常用快捷键
ctrl+c强行中止当前命令ctrl+l==clearctrl+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>log2ls -l /etc /dev >log1 2>>log2- 自己组合
 
 
- 去除无效输出
 
- 背景:写脚本时不希望看到有输出
ls &> /dev/null:不存在/dev/null这个文件,等价于回收站 
备注:
wc:统计文本 行数,单词数,字节,字符word line character ans byte countwc /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 协议 ,转载请注明出处!