shell常规操作及脚本问题记录

一.关于python和shell路径问题

在linux中调用的python文件,python中的路径需要为绝对路径,及'/home/...'开始的地址。 shell中调用的地址可以是相对地址,及从用户处开始 '~/....'

二.别名的创建和使用

临时别名创建  alias t='',如果需要长久使用则先创建然后再将其添加到 .bashrc  类似个人环境变量
vi ~/.bashrc
其中最后添加
alias t=''
编辑完后,运行
source ~/.bashrc
使用当前环境变量

三.历史使用命令查看

history   找到后使用  !1 的方式使用命令

四.关于sh不支持[[这样的扩展,bash支持

程序会报错
采用 bash python.sh 的方式运行含有[[的程序

五.在windows上编写的脚本会包含\r\n 换行等符,linux不支持,需要转文件格式

在windows上编写的脚本上传都linux执行时,需要vim 一下你的文件,然后:set fileformat=unix

六.shell语句问题

数值比较方面  
    a==b ---> a -eq b
    a>b  ---> a -gt b  a>=b --->a -ge b
    a a -lt b  a<=b --->a -le b
    a!=b ---> a -ne b
字符串比较
    采用常规比较
    ‘aa’ == 'bbb'
       'aa' > 'nm'

文件比较运算符
-e filename     如果 filename存在,则为真     [ -e /var/log/syslog ]
-d filename     如果 filename为目录,则为真     [ -d /tmp/mydir ]
-f filename     如果 filename为常规文件,则为真     [ -f /usr/bin/grep ]
-L filename     如果 filename为符号链接,则为真     [ -L /usr/bin/grep ]
-r filename     如果 filename可读,则为真     [ -r /var/log/syslog ]
-w filename     如果 filename可写,则为真     [ -w /var/mytmp.txt ]
-x filename     如果 filename可执行,则为真     [ -L /usr/bin/grep ]
filename1-nt filename2     如果 filename1比 filename2新,则为真     [ /tmp/install/etc/services -nt /etc/services ]
filename1-ot filename2     如果 filename1比 filename2旧,则为真     [ /boot/bzImage -ot arch/i386/boot/bzImage ]

字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)
-z string     如果 string长度为零,则为真     [ -z "$myvar" ]
-n string     如果 string长度非零,则为真     [ -n "$myvar" ]
string1= string2     如果 string1与 string2相同,则为真     [ "$myvar" = "one two three" ]
string1!= string2     如果 string1与 string2不同,则为真     [ "$myvar" != "one two three" ]

算术比较运算符
num1-eq num2     等于    [ 3 -eq $mynum ]
num1-ne num2     不等于    [ 3 -ne $mynum ]
num1-lt num2     小于    [ 3 -lt $mynum ]
num1-le num2     小于或等于    [ 3 -le $mynum ]
num1-gt num2     大于    [ 3 -gt $mynum ]
num1-ge num2     大于或等于    [ 3 -ge $mynum ]

七.软连接(文件或者文件夹)不占用空间

ln -s 目标地址  需要软连接地址
如:ln -s /mnt/hdisk1/AnData/battery_data/  .

八、常用脚本

shell流程:
if then fi
if :; then fi
if then elif then else fi
for in do done for x in $(ls) == for x in `ls`
for (( ; ; )) do done
while (( ))do done while read test;
until (( ))do done
break:跳出所有循环 continue:跳出当前循环
打印:echo "123456789"

批量创建文件夹:
for ((i=1;i<100;i++));do mkdir $i;done

批量改名:
date=`date +%Y%m%d`
date=$(date +%Y%m%d)
a=0
for x in $(ls);do mv $x file_${date:2:6}_$a;a=$(($a+1));done

你可能感兴趣的:(shell,linux)