[shell] 小札

1、获取当前路径 SCRIPT_PATH=$(cd `dirname $0`;pwd;cd - > /dev/null)

# dirname $0,取得当前执行的脚本文件的父目录
#cd `dirname $0`,进入这个目录(切换当前工作目录)
#pwd,显示当前工作目录(cd执行后的)
#cd -> /dev/null 切换到前一个工作目录,不回显

2、profile立即生效 . /etc/profile 或 source /etc/profile

3、输出重定向 > /dev/null 2>&1

#> 代表重定向到哪里,例如:echo "123" > /home/123.txt
#/dev/null 代表空设备文件
#2> 表示stderr标准错误
#& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
#1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于 "1>/dev/null"

最常用的方式有:
command > file 2>file  与command > file 2>&1
它们有什么不同的地方吗?
首先command > file 2>file 的意思是将命令所产生的标准输出信息,和错误的输出信息送到file 中.command  > file 2>file 这样的写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当使用了FD1和FD2两个同时去抢占file 的管道。
而command >file 2>&1 这条命令就将stdout直接送向file, stderr 继承了FD1管道后,再被送往file,此时,file 只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容。
从IO效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shell脚本的时候,较多的时候我们会command > file 2>&1 这样的写法。

4、if [ "" -a "" ]  -o  ! ,与、或、非

5、rm -rf `ls |grep -v ${UPGRADE_SOFTWARE_PACKAGE}`

6、upgrade_version_list=`find . -maxdepth 1 -type d |grep -v "\.$" |grep -vE "${UPPATH_EXCLUDE_DW}"`

查找当前目录本层的文件夹,过滤当前目录,匹配多个

7、grep "^S" 找出空白字符;grep -v "^S" 过滤空白字符;grep -n "^S" 找出空白行;grep -n -v "^S" 过滤空白行

8、upgrade_version=/etc/export/import  去掉前面的路径仅保留import  #echo ${upgrade_version##*/} 

9、脚本相关变量$0、$1-9、$?、 $# 、$@、 $*

10、find . -perm 700 |xargs chmod 777    递归查找权限700文件,修改为777

11、shell之find命令详解 https://www.cnblogs.com/lanchang/p/6597372.html

12、find命令 http://man.linuxde.net/find

13、test_suite_info_id="`date \"+%Y%m%d%H%M%S%s\"`_test"

14、sed的替换命令格式:s/A/B/g 或者 s#A#B#g 或者 s_A_B_g ,

例sed -i s#\<id\>.*\</id\>#\<id\>testsuiteinfoid\</id\>#g

15、awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息  http://blog.chinaunix.net/uid-23302288-id-3785105.html

16、expect命令 https://www.cnblogs.com/lixigang/articles/4849527.html

17、expect脚本必须以interact或expect eof结束,interact 执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。expect eof 这个一定要加,与spawn对应表示捕获终端输出信息终止,类似于if....endif

18、在Linux系统之中,EOF根本不是一个字符,而是当系统读取到文件结尾,所返回的一个信号值(也就是-1),通过比对文件大小判断是否到结尾

19、Linux中,在新的一行的开头,按下Ctrl-D,就代表EOF(如果在一行的中间按下Ctrl-D,则表示输出"标准输入"的缓存区,所以这时必须按两次Ctrl-D);Windows中,Ctrl-Z表示EOF。(顺便提一句,Linux中按下Ctrl-Z,表示将该进程中断,在后台挂起,用fg命令可以重新切回到前台;按下Ctrl-C表示终止该进程。)

20、在shell编程中,”EOF“通常与”<<“结合使用,“<<EOF“表示后续的输入作为子命令或子shell的输入,直到遇到”EOF“,再次返回到主调shell,可将其理解为分界符(delimiter)。

21、sed -n '/^#/d;/^$/d;/^VERSION/p'   删除注释行,删除空白行,打印VERSION开头的行

22、

    if [ ! -f "id_rsa.pub" ]; then
        expect -c "
        spawn ssh-keygen -t rsa
        expect \"*Enter file in which to save the key*\"
        send \"\r\"
        expect \"*Enter passphrase*\"
        send \"\r\"
        expect \"*Enter same passphrase again*\"
        send \"\r\"
        expect eof
        exit
        "
    fi

23、

#!/usr/bin/expect
expect <<-EOF
spawn sftp ftpuser@192.168.12.21
expect "*assword:*"
send "Changeme_123\r"
expect "*sftp>*"
send "put /tmp/dw/sftp_test_data.txt /export/home/ftpuser/data/DataUpload\r"
expect "*sftp>*"
send "exit\r"
interact
expect eof
EOF

24、

用whereis expect查一下expect命令到底在哪,将对应的exp文件修正。
或者使用#!/usr/bin/env expect

25、Sublime Text 工具

26、spawn ssh ${l_ip_tmp} \"cd ~/.ssh/;sed -i \\\"/${l_local_user}@${l_local_hostname}/d\\\" authorized_keys;cat id_rsa_${g_local_ip}.pub >> authorized_keys\"

27、参数符号  https://blog.csdn.net/tanga842428/article/details/71173329 ;  https://blog.csdn.net/zy00000000001/article/details/70135833

28、GitChat,聚合了业界顶级技术专家,可以算是最适合 IT 技术人的学习平台之一了

29、set -x、+x、-o,https://blog.csdn.net/hanbo_112/article/details/53640559

30、sh与bash的区别,https://www.cnblogs.com/hopeworld/archive/2011/03/29/1998488.html

31、.空格文件名,source .bash_rc 与 . .bash_rc 是等效的,source命令通常用命令“.”来替代;通过文件(命令列)设置环境变量时,要用source 命令;1.点斜杠执行脚本是启动了另一个Shell去执行脚本(另一个进程),所以点斜杠执行脚本时,设置的环境变量会随着进程的退出而结束,其中的环境变量设置对当前Shell不起作用。

2.点空格点斜杠执行脚本,是相当于source ./执行脚本,source是执行脚本当中的命令,也就是说在当前进程中执行命令,所以其中的环境变量的设置会对当前Shell其作用。

2、某文件无可执行权限,不想更改此文件的执行权限,但又想执行此文件,可以采用(点号--空格--文件名)的形式来执行一个脚本(只有root用户才可以这么做)

32、sh与./的区别,./a.sh会用你脚本中第一行的那个#!XXX的shell来执行语句,而sh a.sh则是用sh来执行语句,还有一种可能就是./a.sh确定了文件路径,而sh a.sh一定要在a.sh所在目录    https://www.cnblogs.com/pcat/p/5467188.html

33、expect是一种TCL扩展性的语言,有三个主要的命令是spawn(启动进程给其加壳,必须有)expect、exp_send,如没有使用spawn命令,该expect脚本仅能与调用该脚本的进程交互;https://blog.csdn.net/boyishachang/article/details/8677936

34、do xxx{}>${xxx} ??

35、







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值