主题:总结网络工程师学习笔记
当然shell编程中的问题还有很多,这只是我在学校[url=http://www.gobenet.net.cn]网络工程师[/url] 期间的一些笔记
Linux命令和Shell 编程中常见问题小结
来源:Taobao QA Team
学习linux命令和shell的脚本有一段时间了,想和大家分享在学习过程中一些常见问题。这里记录我在使用linux命令和shell编程中碰到的一些常见的问题和解决方法,这里只是记录了一下工作涂鸦,学习涂鸦,不是详细的教程,可能会有需要商榷的地方,请大家不吝赐教。
1. 是否可以将参数一次只传递一个给shell 脚本?
for arg in “$@”
do
list
done
变量arg会被一次赋予每个参数的值,接下来的命令组list将接收每个参数而执行,下面这个函数说明了for循环的用法:
echoargs() {
for arg in “$@”
do
echo $arg
done
return 0
}
2. 如何在命令中使用shell 的变量的值?
要在命令中使用shell变量,最简单的方法就是将命令包含在双引号(“”)中而不是单引号(‘’)中,这是因为shell会在双引号引起来的字符串中进行变量替换,shell回在执行命令对指定的变量值进行替换
如: sed “ /$DEL/d” file1>file2
3. 如何检查一个变量是否包含值?
有好几种方法可以用来进行这种判断。最简单的一种就是使用if语句:
if [ -z “$VAR” ] ; then
list;
fi
VAR是变量的名称,list是如果VAR不包含值是需要执行的命令的序列。通常list会将VAR初始化为某个值。
4. 后台命令运行时的输出
在后台运行作业时要小心:需要用户交互的命令通常不要放在后台执行,因为这样系统就会在那里处于等待的状态. 不过,作业在后台运行一样会将结果输出到屏幕上。如果放在后台运行的作业会产生大量的输出,最好的方法把它的输出重定向到某个文件中:
command >out.file 2>&1 &
在上面的例子中,2>&1表示所有的标准输出和错误输出都将被重定向到一个叫做out.file 的文件中。
5. let “iLoop=$iLoop – 1″ 和 iLoop=$iLoop – 1 的区别
iloop=$iloop-1 意味着 iloop 是一个字符串
let iloop=$iloop+/-num 强制iloop为数字
系统默认“+”是作为字符串处理的,因此它不会被作为一个操作符,而只是被识别为一个普通的字符串。
[yutong@tfs004001 ~]$ d=111
[yutong@tfs004001 ~]$ echo $d+1
111+1
[yutong@tfs004001 ~]$ let d=$d+1; echo $d
112
[yutong@tfs004001 ~]$ a=1
[yutong@tfs004001 ~]$ a=`expr $a + 1`
[yutong@tfs004001 ~]$ echo $a
2
这是另外一种数字计算的方式,不过let命令会更好用;如:a=$d +2 echo $a 是不可以直接运算的,这样系统会认为是字符串的拼接,从而将$d的内容和“+2”的字符串拼接在一起。
6. 远程或程序调用TOP命令时,如何获取数据?
通过其他程序或脚本在非交互式模式下调用top命令,会提示: top: failed tty get 的错误。解决办法:加个-b 选项即可
ssh -o ConnectTimeOut=1 yutong@10.232.4.1 “top -b -n 1 | grep event “| awk ‘{print $10}’
top的默认是要进交互模式的,但ssh远程执行方式其实是不可能给它一个控制台的,所以它就获得tty失败,用“-b” 参数它就不用等待了,直接打印结果就可以了。
7. 以普通用户身份打开的vim ,修改后以root身份保存
这个题目读起来比较纠结,其实是很常见的,常常忘记了sudo就直接用vim编辑/etc内的文件,(不过也不一定,vim发现保存的文件无法保存时候会提示)等编辑好了,保存文件时系统会提示没有权限。曲线方法是先保存为临时文件,退出后再sudo cp回去。不过在vim中可以直接完成,命令如下:
:w !sudo tee %
所以执行这个命令,就相当于在vim外部修改了当前正在编辑文件的权限。
8. 清空或创建一个文件
> file.txt
“>” 符号在shell里面是标准输出重定向,即把(前部个命令的)命令行输出转往一个文件内,但这里没有”前部命令”,输出为空,于是就覆盖(或创建)成一个空文件了。有些脚本的写法是:>file.txt,因为:是bash默认存在的空函数。单纯创建文件也可以用$touch file.txt,touch本来是用作修改文件的时间戳的命令,但如果文件不存在,就自动创建了。
9. 显示当前目录中所有子目录的大小
du -h –max-depth=1
–max-depth=1 参数可以让 du 命令显示当前目录下 1 级子目录的统计信息,当然你也可以把 1 改为 2 ,进一步显示 2 级子目录的统计信息,可以灵活运用。而 -h 参数则是以 Mb 、G 这样的单位来显示大小。
10. 清空屏幕
<CTRL+l>;
这个方式跟之前介绍的reset命令重置终端的作用有些类似,其实都只是发送一段控制序列,让终端的显示复位。
也可以这样运行:
tput clear
tput是专门用来控制终端的工具,也是个很有用的工具。
大家有更好的那就分享学习一下[url=http://www.gobenet.net.cn[/url]
Linux命令和Shell 编程中常见问题小结
来源:Taobao QA Team
学习linux命令和shell的脚本有一段时间了,想和大家分享在学习过程中一些常见问题。这里记录我在使用linux命令和shell编程中碰到的一些常见的问题和解决方法,这里只是记录了一下工作涂鸦,学习涂鸦,不是详细的教程,可能会有需要商榷的地方,请大家不吝赐教。
1. 是否可以将参数一次只传递一个给shell 脚本?
for arg in “$@”
do
list
done
变量arg会被一次赋予每个参数的值,接下来的命令组list将接收每个参数而执行,下面这个函数说明了for循环的用法:
echoargs() {
for arg in “$@”
do
echo $arg
done
return 0
}
2. 如何在命令中使用shell 的变量的值?
要在命令中使用shell变量,最简单的方法就是将命令包含在双引号(“”)中而不是单引号(‘’)中,这是因为shell会在双引号引起来的字符串中进行变量替换,shell回在执行命令对指定的变量值进行替换
如: sed “ /$DEL/d” file1>file2
3. 如何检查一个变量是否包含值?
有好几种方法可以用来进行这种判断。最简单的一种就是使用if语句:
if [ -z “$VAR” ] ; then
list;
fi
VAR是变量的名称,list是如果VAR不包含值是需要执行的命令的序列。通常list会将VAR初始化为某个值。
4. 后台命令运行时的输出
在后台运行作业时要小心:需要用户交互的命令通常不要放在后台执行,因为这样系统就会在那里处于等待的状态. 不过,作业在后台运行一样会将结果输出到屏幕上。如果放在后台运行的作业会产生大量的输出,最好的方法把它的输出重定向到某个文件中:
command >out.file 2>&1 &
在上面的例子中,2>&1表示所有的标准输出和错误输出都将被重定向到一个叫做out.file 的文件中。
5. let “iLoop=$iLoop – 1″ 和 iLoop=$iLoop – 1 的区别
iloop=$iloop-1 意味着 iloop 是一个字符串
let iloop=$iloop+/-num 强制iloop为数字
系统默认“+”是作为字符串处理的,因此它不会被作为一个操作符,而只是被识别为一个普通的字符串。
[yutong@tfs004001 ~]$ d=111
[yutong@tfs004001 ~]$ echo $d+1
111+1
[yutong@tfs004001 ~]$ let d=$d+1; echo $d
112
[yutong@tfs004001 ~]$ a=1
[yutong@tfs004001 ~]$ a=`expr $a + 1`
[yutong@tfs004001 ~]$ echo $a
2
这是另外一种数字计算的方式,不过let命令会更好用;如:a=$d +2 echo $a 是不可以直接运算的,这样系统会认为是字符串的拼接,从而将$d的内容和“+2”的字符串拼接在一起。
6. 远程或程序调用TOP命令时,如何获取数据?
通过其他程序或脚本在非交互式模式下调用top命令,会提示: top: failed tty get 的错误。解决办法:加个-b 选项即可
ssh -o ConnectTimeOut=1 yutong@10.232.4.1 “top -b -n 1 | grep event “| awk ‘{print $10}’
top的默认是要进交互模式的,但ssh远程执行方式其实是不可能给它一个控制台的,所以它就获得tty失败,用“-b” 参数它就不用等待了,直接打印结果就可以了。
7. 以普通用户身份打开的vim ,修改后以root身份保存
这个题目读起来比较纠结,其实是很常见的,常常忘记了sudo就直接用vim编辑/etc内的文件,(不过也不一定,vim发现保存的文件无法保存时候会提示)等编辑好了,保存文件时系统会提示没有权限。曲线方法是先保存为临时文件,退出后再sudo cp回去。不过在vim中可以直接完成,命令如下:
:w !sudo tee %
所以执行这个命令,就相当于在vim外部修改了当前正在编辑文件的权限。
8. 清空或创建一个文件
> file.txt
“>” 符号在shell里面是标准输出重定向,即把(前部个命令的)命令行输出转往一个文件内,但这里没有”前部命令”,输出为空,于是就覆盖(或创建)成一个空文件了。有些脚本的写法是:>file.txt,因为:是bash默认存在的空函数。单纯创建文件也可以用$touch file.txt,touch本来是用作修改文件的时间戳的命令,但如果文件不存在,就自动创建了。
9. 显示当前目录中所有子目录的大小
du -h –max-depth=1
–max-depth=1 参数可以让 du 命令显示当前目录下 1 级子目录的统计信息,当然你也可以把 1 改为 2 ,进一步显示 2 级子目录的统计信息,可以灵活运用。而 -h 参数则是以 Mb 、G 这样的单位来显示大小。
10. 清空屏幕
<CTRL+l>;
这个方式跟之前介绍的reset命令重置终端的作用有些类似,其实都只是发送一段控制序列,让终端的显示复位。
也可以这样运行:
tput clear
tput是专门用来控制终端的工具,也是个很有用的工具。
大家有更好的那就分享学习一下[url=http://www.gobenet.net.cn[/url]