今天开始学习shell编程!!!

时间:2021-01-30 00:15:31

已经入职一个月了。

经过这一个月重复的工作每天都是做一些环境配置的事。

对环境配置已经很熟练了。也不需要再通过每一步的安装来学习新的知识了。

所以我想写一个shell脚本让程序自己安装。

昨天晚上都凌晨12点了又突发灵感非要写,然后从温暖的被窝里爬出来打开电脑写了我平生第一个shell脚本。

如我所料,很失败。因为对shell的语法一点都不了解。就那么一堆命令往程序里面一堆。

今天决定该学习SHELL啦!!!

编程出身的我果然对编程很有感觉。因为大学编了3年程现在学习shell我知道哪些是以后编程会用到的。注重学习哪些内容。一下子看了7个shell基础视频,边看边敲,觉得时间过的真快呀!

今天学习了一下简单的语法。如下:

1.fork炸弹
#env | grep LANG
#vi fork.sh
 
#chmod +x fork.sh
#./fork.sh

2.bash的启动顺序
init--getty--login--bash

3.bash初始化文件
#pstree
#top
#vi /etc/profile
#rpm -qa | grep vim
#yum install vim*
#alias vi=vim

#vi ~/.bash_profile    //单个用户自己的环境
   alias vi=vim     长久保持
#vi /etc/profile          //全局环境
   alias vi=vim     长久保持

4.
#bash --version
#type pwd
#type test
#ls;pwd;date
#exit
#(ls;pwd;date)>outputfile.txt
#cat outputfile.txt

#unalias vi //取消
#\vi  //暂时不使用

5.
#vi test.sh
   #!/bin/bash     //必须有,指出shell类型为bash
   while:
   do
        echo"welcome boobooke"
        sleep 5  //5s执行一次的死循环
   done

6.
#vi test1.sh
    #!/bin/bash
    #Cleanup
    cd /var/log
    cat /dev/null > messages
    cat /dev/null > wtmp
    echo "Logs cleaned up."
#chmod +x test1.sh
#./test1.sh         //新的shell执行
#. test1.sh         //当前shell执行
#source test1.sh  //当前shell执行
#eval '. test1.sh' //当前shell执行
#/bin/bash test1.sh

7.
#vi test2.sh
  #!/bin/bash
   who_name="wilson"
   echo "${who_name}hello,shell word"

8.
#vi test3.sh
  #!/bin/bash
 function say_hello()
 {
 echo "Enter Your name:"
 read name
 echo "Hello $name"
 }
echo "programme starts here....."
say_hello
echo "programme ends"

9.命令替换
#ls 'cat file' -al

10.变量与常用符号
#echo $PATH //环境变量
#name=boobooke //本地变量只在该shell有用
#echo $name
#bash //启动一个子shell不能用了
#echo $name
#name=admin
#echo $name
#exit
#echo $name

#echo $PATH
#bash
#echo $PATH

11.
区分大小写
=两边不可以有空格
空格用“”
#name="welcome boobooke"
#echo $name
#echo "admin say $name"
#echo "admin say ${name}root"

12.
#set //局部变量
#unset name
#set
#echo ${name}${name}

13.设置只读变量不可清除更改
#free=book
#echo $free
#readonly free
#free=www
  不行

14.
#env //环境变量
#echo $HOME
#bash
#echo $HOME
#exit
#NAME=book
#export NAME
#env | grep N
#unset NAME

15.
#echo $PATH
#PATH=${PATH}:/opt/bin
#echo $PATH

16.
变量长度
${#var} 字符串长度($var的字符数量)
 对于一个数组,${#array}是数组中第一个元素的长度
#name=boobooke
#name="www boobooke com"
#echo $name
#echo ${#name}
 //包括空格
#arr1=(a bb ccc dddd)
#echo ${#arr1}        //arr1数组第一个元素的长度
#echo ${#arr1[*]}     //arr1数组有几个元素
#echo ${arr1[*]}       //输出数组所有元素
#echo ${arr1[2]}      //输出数组第3个元素

17.
变量扩展
${var:pos} 变量var从位置pos开始取字符
${var:pos:len}从位置pos开始,取len个字符
${var/Pattern/Replacement}
使用Replacement来替换var中的第一个Pattern的匹配
${var//Pattern/Replacement}
全局替换,在var中所有的匹配都用Replacement来替换

18.
指定类型的变量
declare
typeset
-r 只读
#declare -r var1 =#readonly var1
-i整形
#declare -i nu
#nu=1234
#echo $nu
#nu=3.12 不行
#mou=3.12可以
-a 数组
-f 函数
-x export

19.变量的间接引用
#admin=wilson
#wilson=book
#echo $admin
#eval admin=\$$admin
#echo &admin

20.产生随机整数
$RANDOM
#!/bin/bash
count=1
MAX=10
while ["$count" -lt "$MAX"]   //-lt是小于
do
   num=$RANDOM
   echo $num
   let "count+=1"
done
echo"-----------"

21.位置变量参数 最多9个
#vi var1.sh
  #!/bin/bash
  echo"这个脚本的名字是$0"
  echo"第1个参数是$1"
  echo"第2个参数是$2"
  echo"第3个参数是$3"
  echo"第4个参数是$4"
  echo"第5个参数是$5"
#chmod +x var1.sh
#./var1.sh a b c d e f

22.
#vi var2.sh
  #!/bin/bash
  echo "Hello,$1 welcome boobooke!"
#./var2.sh welson
输出:Hello,welson welcome boobooke!

23.向系统命令传递一个参数
#!/bin/bash
grep $1 /etc/passwd | awk -F:'{print $3"\t"$6}'
//输入用户,查出他的UID和家目录
#vi grep.sh
  #!/bin/bash
  grep $1 /etc/passwd
#chmod +x grep.sh
#./grep.sh root