引用自《linux shell脚本攻略》

###  echo
不加引号和使用单引号都是原样输出,不加引号时分号被认为是命令结束,
单引号中无法输出单引号

echo -n #不换行输出 echo -e "1\t2" #使用转义字符时-e参数 echo -e "\e[31m hello" #使用红色文字显示hello,\e[0m重置回默认颜色,30开始文字颜色,40开始背景颜色 stty -echo #输入不显示在终端 stty echo #输入显示在终端

变量

  a=55                    #定义变量并赋值,不加空格,加空格为比较,a="hello boy"
	c=$(date)             #将命令赋值给c,使用$加括号
	c=`命令`              #同上
	$(  )                    #命令,或者反引号(ESC下)
	$[  ]                    #算术运算,或let
	${  }                    #使用变量,${ 变量 }同$变量
	${#  }                #获得变量长度 echo ${#5}
	$?                   #命令执行状态,0成功,其他错误
	$0                      #返回当前shell
	$1 $2...             #第一个参数,第二个参数...
    $@                     #传入脚本的所有参数,同$*
	$!                   #上一个后台进程的PID

输入重定向

>      #标准输出(正确执行到结果)重定向(原本显示在终端等位置),覆盖到指定位置
>>    #标准输出重定向,追加到指定位置
1>    #等同于>,1可省略
2>    #错误信息(出错信息)重定向,覆盖到指定位置
2>&1   #标准输出与错误输出均重定向到同一位置(全部执行结果)
>/dev/null                         #丢弃正确执行结果
>/dev/null  	2>&1            #丢弃所有执行结果
命令 >a.txt   2>&1            #命令全部执行结果输入到a.txt,等于:命令  >&  a.txt
date | tee a.txt | grep ..    #执行date命令的输出保存在a.txt,并继续传递数据给后方的grep,作                                         #为grep的输入,tee只保存标准输出1,并且以覆盖的方式,追加用-a参数

输出重定向

命令   < a.txt                          #从a.txt读取数据作为命令的输入,等同于:命令   0<a.txt
命令    <<EOF                       #读取EOF之间的内容作为输入,用于较长或多行内容
           数据                           #EOF可以替换为其他单词
					 EOF                                        

数组

普通数组 a = (1 2 3 4 5) #定义整型数组,每个元素空格隔开 echo ${a[0]} a=(abc def "ni hao") #定义字符串数组 b [0] = "hi" #引号内仅能包含一个元素,括号可以多个元素 b [1] = "ha ha ha" #定义字符串数组 echo ${a[0]} #输出第0个元素 echo ${a[*]} #显示数组中的所有值,也可以用@代替 echo ${#a[]} #显示数组长度`

** 关联数组** declare -A fruits_value #定义一个关联数组,数组名fruits_value fruits_value = ( [apple] = '5 yuan' [ orange] = '4 yuan' ) #索引,字符串,空格隔开 echo "apple is ${ fruits_value[apple] }" #输出索引apple的 echo ${!fruits_value[*]} #输出数组全部的元素,比普通数组多一个!号,在数组名之前

时间

date #显示当前日期 date +%a #星期 date +%y #年 date +%b #月 date +%d #日 date +%H #时 date +%M #分 date +%S #秒 date +%s #距标准时间的秒数

判断

if [ a -lt b] #lt小于,eq等于也可用=或==。gt大于,le小于等于,ge大于等于,ne不等于 then echo a<b else
echo a>b fi

循环

for a in ``seq 0 40 #a从零计数到40 do echo -n $a done

算数运算

let c=a+b 或 c=$[a+b] 或c=$((a+b)) 或 c='expr $a + $b' 或c=$(expr $a + $b) #只能用于整数 let a++ 或 let a+=1

字符转换

tr

终端

stty -echo #不将输入的内容显示在终端,用于读取密码 stty echo #取消以上

从网页获取壁纸

#!/bin/bash ###输入起始页和末页,空格隔开 read start end for((i=$start;i<=$end;i++)) do curl http://wallpaperswide.com/page/${i} |grep prevframe_show | cut -d"/" -f5 |cut -d. -f1 |while read wall_url do sudo axel -c -a -o /usr/share/backgrounds http://wallpaperswide.com/download/$wall_url-wallpaper-1366x768.jpg done done

###获取bing当天壁纸 url=$(curl -s "https://cn.bing.com/HPImageArchive.aspx?format=js&idx=1&n=1&nc=1498657985239&pid=hp&video=1" |cut -d'"' -f18) sudo axel -a -c -o /usr/share/backgrounds https://cn.bing.com$url