zoukankan      html  css  js  c++  java
  • shell tips

    1 自动输入密码

    by https://blog.csdn.net/zhangjikuan/article/details/51105166

    通过expect 工具实现自动输入命令行下交互式密码
    case

    alias relay="expect ~/bin/relay.sh"
    
    cat relay.sh
    #!/bin/expect
    set timeout 30
    spawn ssh your-name@your.relay.server.com -p10086
    expect "Password>: "
    send "your-password
    "
    interact
    

    2 Shell 编程

    https://www.linuxprobe.com/shell-script-variable.html

    系统变量

    $n   传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2
    $?   上个命令的退出状态,或函数的返回值。成功返回0,失败返回1
    $#   传递给脚本或函数的参数个数
    $*   所有这些参数都被双引号引住。若一个脚本接收两个参数,$*等于$1$2
    $0   正在被执行命令的名字。对于shell脚本而言,这是被激活命令的路径
    $@   被双引号(” “)包含时,与 $* 稍有不同。若一个脚本接收到两个参数,$@等价于$1$2
    $$   当前shell的进程号。对于shell脚本,这是其正在执行时的进程ID
    $!   前一个后台命令的进程号
    

    文件或目录判断

    -b file 若文件存在且是一个块特殊文件,则为真
    -c file 若文件存在且是一个字符特殊文件,则为真
    -d file 若文件存在且是一个目录,则为真
    -e file 若文件存在,则为真
    -f file 若文件存在且是一个规则文件,则为真
    -g file 若文件存在且设置了SGID位的值,则为真
    -h file 若文件是软链接,则为真
    -k file 若文件存在且设置了”sticky”位的值
    -L file 若文件为符号链接,则为真
    -p file 若文件存在且为一已命名管道,则为真
    -r file 若文件可读,则为真
    -s file 判断文件是否存在,且是否为非空,不为空,则为真
    -S file	判断文件是否存在,且是否为套接字文件
    -t file 文件描述符(默认为1)指定的设备为终端时为真
    -u file 若文件存在且设置了SUID位,则为真
    -w file 若文件可写,则为真
    -x file 若文件可执行,则为真
    

    [ file1 -nt file2 ] 若file1比file2新,或file1存在但file2不存在,则为真
    [ file1 -ot file2 ] 若file1比file2老,或file2存在但file1不存在,则为真
    [ file1 -ef file2 ] 若file1和file2指向相同的设备和节点号则返回,为真

    整数判断

    -eq  两数相等,则为真     例:if [ "$a" -eq "$b" ]
    -ne  两数不相等,则为真   例:if [ "$a" -ne "$b" ]
    -gt  a大于b,则为真       例:if [ "$a" -gt "$b" ]
    -ge  大于或等于,则为真   例:if [ "$a" -ge "$b" ]
    -lt  a小于b,则为真       例:if [ "$a" -lt "$b" ]
    -le  a小于或等于b,则为真 例:if [ "$a" -le "$b" ]
    
    < 小于(需双括号)      例:(("$a" < "$b"))
    <=   小于等于(需双括号)  例:(("$a" <= "$b")) 
    >    大于(需双括号)      例:(("$a" > "$b"))
    >=   大于等于(需双括号)  例:(("$a" >= "$b"))
    小数据比较可使用AWK。
    

    逻辑运算判断符

    !  [ ! false ]              返回true 逻辑否,条件为假,结果为真
    -a [ $a -lt 2 -a $b -gt 5 ] 返回true 逻辑与,两个表达式都为真,则为真
    -o [ $a -lt 2 -o $b -gt 5 ] 返回true 逻辑或,只要有一个表达式为true,则为真
    
    [ ] || [ ] 用OR来合并两个条件
    [ ] && [ ] 用AND来合并两个条件
    

    字符串判断

    == 若两个字符串相同则为真,与=等价 例:[ "str1" = "str2" ]
    != 若字符串不相同则为真           例:[ "str1" != "str2" ]
    < 若str1字典排序在str2前则为真   例:[[ "str1" < "str2" ]] >  若str1字典排序在str2后则为真   例:[ "str1" > "str2" ]
    -n 若str长度非零则为真,即非空     例:[ -n "str1" ]
    -z 若file长度为零,即空,则为真     例:[ -z "str1" ]
    

    注意:在[]结构中”< “需要被转义,例如:[ "str1" /< "str2" ],在双中括号中则无需转义。 总结:使用-n在[]结构中测试,必须要用""把变量引起来,使用一个未被""的字符串,请使用 ! -z ,如果使用未被双引号变量,虽然可以工作,但这并不安全,习惯于使用双引号括住变量测试字符串是一种良好的习惯。 另外,[[ ]] 结构比[ ]结构更加通用。

  • 相关阅读:
    我们在囧途之程序员转型记
    项目开发应遵循1+7还是7+1?
    自己用的一款模板解析程序(支持插件和扩展)(思路讨论和使用体验)
    设计的核心任务之一:层次的控制
    【设计 = 编码】 VS 【设计 ≠ 编码】
    从一生的角度看程序员的学习和发展
    编码质量与命名
    软件开发十年小史
    设计的核心任务之三:确保正交性
    国内外软件开发上的差距与分析
  • 原文地址:https://www.cnblogs.com/lawlietfans/p/12186849.html
Copyright © 2011-2022 走看看