linux shell脚本的一些基础点
1.标准输入和输出 0 1 2
0>;表示stdin标准输入
1>:表示stdout标准输出
2>:表示stderr错误输出
看个例子:
./start.sh >/dev/null 2>&1
1: start.sh 命令脚本
2:/dev/null 代表空设备文件
3:2> 表示stderr标准错误
4:& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
5:1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于 "1>/dev/null"
因此,>/dev/null 2>&1也可以写成“1> /dev/null 2> &1”
那么本文标题的语句执行过程为:
1>/dev/null :首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
2>&1 :接着,标准错误输出重定向 到 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
一个相对完整的启动方式是
./command.sh >/dev/null 2>1& &(后台进程启动)
2.变量赋值建议不使用空格,因为会被当做命令来处理
3.(())和 $(())之间区别
(()):会将括号内的表达式做运算处理
$(()):当做运算处理,并将结果返回
看个例子;
var1=1;
var2=2;
var3=$((var1 < var2))
var4=$((var1 > var2))
echo 'var3:' $var3
echo 'var4:' $var4
var5=((var1 < var2)) //这句会报错,因为没有返回值,不能对var5进行赋值
echo $var5
---------结果------------
var3:1 // 若是未true 则返回1 。flase 返回0
var4:0
4. &&和||
AA && BB ==== > if [ A ];then BB ;fi 如果AA成立 才执行BB
常用做法: cd /home/tmp &&rm -rf *
AA || BB ==== > if [ A ];then ;else BB ;fi 如果AA 成立的话,那么去执行 BB
常用的做法是 cd /home/tmp || exit 1
5.if 后面跟的是一个条件表达式
语法:
if [ condition ];then do something ; fi
condition 中条件大于 1 即可
if [ -z "$1" ];then echo 'the file is existed' ; fi
if [ grep -P 'bin' fielname|wc -l ]; then do something ; fi
6.touch && echo && {}
touch aa 快速建立一个a文件
touch {1..10} 快速建立文件名从1到10的文件
touch [1..10] 不会建立任何的文件
echo *
1.若是文件夹有文件或目录,会输出所有的文件或目录
2.若是文件夹为空的话,会输出 *
echo ? //匹配单个字符的文件或是目录并输出
echo {1..10} 输出1-10的数字
通过以上的例子可以看出 {}会是做循环遍历,再看个。
for i in {1..5} ; do echo $i ; done
---------结果如下所示:---------
1
2
3
4
5
7.几个特殊符号
1.`` 执行符号中的脚本并发挥结果
2.~ 指定到 /home/loginid
3.基本的shell命令都是以 空格作为分隔符 例如 awk 等
4."" , '' 输出字符串
aa=1
echo "$aa" // 1
echo "\$aa" // $aa
echo '$aa' // $aa
若是中间包含 $aa 则解析该变量,得到1 ,若是不想解析 \$aa 这样输出的就是 $aa
8.参数变量
$#: 获取参数个数
$?: 上一个命令结果 成功是 0 失败为1
$@: 输出参数
$*: 输出参数
"$@" 返回一个数组
# !/bin/bash
for i in "$@"
do
echo $i
done
------------
./para.sh 11 ee ff
11
ee
ff
"$*" 返回一个字符串
for i in "$*"
do
echo $i
done
-------------
./para.sh 11 22
11 22
不加双引号的 $@和$*基本没什么区别
$#的几个特殊用处
var=1abcdefg
echo ${#var} --- 8
echo ${var:0:5} --- 1abcd
echo ${var/1*/5678} --- 5678
$$: 当前的进程号 没什么用处
设置局部变量 local 没什么特别的 ,变量不加 local ,那么就是全局的
9。命令执行的顺序
1.alias 定义的命令
2.function定义命令
3.内部命令 系统自身带的命令 一般也是默认$PATH
4.外部命令 $PATH中另外加的
10.命令行中几个快捷键
ctrl + w :删除最后一个输入 以空格为分隔符
ctrl + v :删除一行命令行
ctrl + y :撤销上一个命令
ctrl + a :移动到命令行首
ctrl + e :移动到命令行尾
11.nuhup 就是以后台程序启动程序 ,也可以说是精灵进程
nohup command &
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。
更倾向于直接使用 & 来简单
12. grep 的几个使用小技巧
grep -v "hah" filename : 查询非hah的数据
grep -o 使用正则表达式
grep -P 使用Perl的正则表达式
grep "line 5" filename -A1 :匹配到数据后再将下一行的数据显示出来
grep "line 5" filename -B1 :匹配到数据后再将上一行的数据显示出来
grep -n :匹配到数据后,除了显示匹配的内容外,另外显示行号
13. sed 和 awk 较为复杂,另作笔记吧
分享到:
相关推荐
shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人...
学习shell编程的资料
shell编程-shell编程-分支语句(1) shell编程-shell编程-分支语句(2) shell编程-shell编程-循环语句(1) shell编程-shell编程-循环语句(2) Linux的shell编程(一) Linux的shell编程(二) Linux的...
unix shell编程第三版笔记,铁道出版社
变量: 变量的赋值和引用 在shell编程中变量没有类型,简称弱类型编程语言,不需要声明,在引用这个变量时会创建它(在变量名前加$符号引用变量的值)。在定义变量时,若String中包含空格、制表符、换行符,需用单...
该文档是本人阅读《linux命令行大全》对最后第四章节的shell脚本编程的学习笔记总结。可以在只看次笔记的情况下完全掌握shell编程
shell编程指南shell编程指南shell编程指南shell编程指南shell编程指南shell编程指南shell编程指南shell编程指南
本书重点讲述了当下最流行的两个Linux ...通过对一个个实例的讲解,循序渐进地介绍了Linux Shell中的各个知识点,使读者逐步具备读写Shell程序的能力。 本书适合初、中级专业技术人员,以及对本技术感兴趣的读者阅读。
《LINUX与UNIX SHELL编程指南》读书笔记-二次发布版
《LINUX与UNIX SHELL编程指南》读书笔记.pdf
学习笔记:LINUX与UNIX_Shell编程指南
shell script学习中的笔记
LINUX操作命令与UNIX SHELL编程指南
shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程...
一本关于linux与UNIX的shell脚本编程书籍,很不错,实用
shell编程shell编程shell编程shell编程
shell编程题目练习,练习基本的shell编程,学习脚本语言,提高效率