例1git
#!/bin/bash #格式规定的第一句话,这行代码的!后代表了脚本要用Bash shell执行 #分开写两行代码,脚本会一次执行 date #显示当前时间 who #显示登录帐户
chmod u+x test.sh #赋予脚本执行权限
./test.sh # ./的意思是当前目录
例2github
#!/bin/bash #echo "文本" 则文本会在命令行中显示,注意使用双引号能够避免不少麻烦 echo -n "当前时间:" #使用 -n 命令可使date的结果和当前时间处在同一行 date echo " 在线用户" # 普通的echo ,在线用户本身独占一行 who
在脚本中出现$,就意味着这是个变量,如$val1,反过来要表示美圆的话要加上转义符号 $15 即为15美圆shell
用户能够本身定义变量,但有两点注意:安全
用户变量能够经过美圆符号引用bash
var1=10 #不能有空格 var2=$var1 #用$符号引用
testing=$(date) #时间信息赋值给了testing
#常见用法,将日期加入文件名 #!/bin/bash today=$(date +%y%m%d) #提取时间信息中的年(y)月(m)日(d) mv test* test*.$today
date > text #将日期信息保存在text文件中
date>>text #将日期【添加】到text文件中
var5=$(bc << EOF #bc,shell的计算器,这段代码计算了var1*var2+var3+var4的值,并取四位小数 scale = 4 a1 = ( $var1 * $var2 ) b1 = ($var3 * $var4 ) a1+b1 EOF )
apt -list | sort >apt.list #将apt包的列表排序并输出到apt.list文件中
·expr 1 + 5 #空格不能省略
expr 1 * 5 #会报错 expr 1 \* 5 #加上转义符后,正确
#如下两行代码是一个意思 [ 4 *1 ] expr 4 \* 1
#利用管道将echo命令的结果输入到计算器bc中,返回结果 var1=$(echo "scale=4;3.14 / 5" | bc) #scale能够肯定小数位数但不是四舍五入而是去尾,切记
echo $? #查看上一个命令的退出码
exit 5
退出码即为5例1:less
#!/bin/bash #if用法的基本举例 if pwd #if + 命令 若命令执行(退出码为0,或者说既判为真?),则进行then then echo " It worked" #输出 It worked,至于pwd的输出,不会显示出来的 fi #if 语句结束 #另外一个例子 if wrong #if + 命令 若命令不执行(退出码不为0,或者说既判为否?),则跳过then then echo " It worked" #输出 It worked,至于pwd的输出,不会显示出来的 fi #if 语句结束
例2命令行
#!/bin/bash # if -then -else 命令执行则then,不执行则else testuser=NoSuchUser # if grep $testuser /etc/passwd then echo "The bash files for user $testuser are:" ls - /home/$testuser/.b* echo #输出空一行 else echo "The user $testuser does not exist on the system" echo fi
例3code
#!/bin/bash #嵌套的高级用法 elif ,实际上是:else+if testuser=NoSuchUser # if grep $testuser /etc/passwd then echo "The user $testuser exists on the system" elif ls -d /home/$testuser #else后面接if,连写的话会很方便 then echo "The user $testuser does not exist on the system" echo "However ,$testuser has a directory" fi
#数值比较功能 #eq 为= g为greater l大概为less [ n1 -eq n2 ] #n1=n2 [ n1 -ge n2 ] #n1>=n2 [ n1 -gt n2 ] #n1>n2 [ n1 -le n2 ] #n1<=n2 [ n1 -lt n2 ] #n1<n2 [ n1 -ne n2 ] #n1!=n2
#字符串比较功能 #使用大于小于号必定要注意加上转义号,不然会生成文件并断定为真 [ str1 = str2 ] #比较字符串是否相同 [ str1 !=s tr2 ] #比较字符串是否不一样 [ str1 \< str2 ] #字符串1是否比2小,注意转义号 [ str1 \> str2 ] #字符串1是否比2大,注意转义号 [ -n str1 ] #字符串长度是否为非0 [ -z str1 ] #字符串长度是否为0 #test的比较大小和sort的正好反过来,由于test用的是标准ASCII顺序
#能够用来检查系统中的文件,贼好用 [ -d file ] #检查file是否存在并为一个目录(dir) [ -e file ] #检查file是否存(exist) [ -f file ] #检查file是否存在并为一个文件(file) [ -r file ] #检查file是否存在并可读(read) [ -s file ] #检查file是否存在并不是空 [ -w file ] #检查file是否存在并可写(write) [ -x file ] #检查file是否存在并可执行 [ file1 -nt file2 ] #检查file1是否比file2新(newer then) [ file1 -ot file2 ] #检查file1是否比file2旧(older then)
#!/bin/bash #检查用户,对应的用户有不一样的输出 case $USER in #注意in rich | barbara) #注意) echo "Welcome, $USER" echo "Please enjoy your visit";; #注意双分号 testing) echo "Special testing account";; #注意双分号 Jessica) echo "Do not forget to log off when you're done";; #注意双分号 *) echo Sorry, you are not allowed here";; #注意双分号 esac #反写,结束
####1.for 命令排序
#!/bin/bash # for test in "Beijing Nanjing Shanghai Guangzhou Jinan Xi'an" #把列表中的值依次赋值给test,又用到了in,另外双引号是个好东西 do echo "The next city is $test" done # 结束符号
#!/bin/bash # file="cities" #cities 文件名。文件须要和脚本在同一目录下 # for test in $( cat $file) #读取文件中的值 do echo "The next city is $test" done #但有时,文件中有空格,如New Shanghai,输出就会当成New 和 Shanghai两个,由于的字段分隔符为空格
IFS=$'\n' #以换行符为字段分隔符 IFS=$'\n':;" #以换行符、冒号、分号、双引号为字段分隔符 # #若是须要屡次改变IFS,把默认的先存起来是个安全的好主意 IFS.OLD=$IFS
#!/bin/bash #注意双括号和分号 for (( i=1; i <=10 ;i++ )) #从1开始,每次加1,到10中止 do echo "The nest number is $i" done # #还可使用多个变量哦,用逗号分隔 for (( a=1 , b=10; a <=10 ;a++ ,b-- )) do echo " $a - $b" #没作计算,就是输出 done
#!/bin/bash # var1=10 # while [ $var1 -gt 0 ] #若var1大于0则继续 do echo $var1 var1=$[ $var1 -1 ] #计算减一,注意方括号先后的空格 done
#!/bin/bash # var1=100 # until [ $var1 -eq 0 ] do echo $var1 var1=$[ var1 -25 ] done
break
是退出当下循环,break 2
是退出外面一层的循环,break 3
是退出外面的外面一层的循环#!/bin/bash #这个脚本最后的输出会跳过var1大于5小于10的部分 for ((var1 =1 ; var1<15 ;var1++ )) do if [ $var1 -gt 5 ] && [ $var -lt 10 ] then continue fi echo "The number is $var1" done #注意,continue不要和计数部分写在一块儿,会跳过计数形成死循环的
done | sort >test.txt
将循环输出排序并保存在test.txt文件中#!/bin/bash #这个脚本在扫描PATH环境变量下全部有可执行文件的目录,也就是电脑中全部安装的程序 #输出真多…… IFS=: for folder in $PATH do echo "$folder:" for file in $folder/* do if [ -x $file ] then echo " $file" fi done done
未完待续,有新想法再写ci