Linux Shell编程 学习笔记

Shell环境的切换
登陆Shell,用户每次登陆系统后自动加载的Shell程序
大多数Linux系统采用 /bin/bash 作为默认登陆Shell
/etc/shells 文件记录系统支持的Shell


系统可以使用的shells,记录在/etc/shells档案中
cat /etc/shells

echo $SHELL


/etc/passwd
每一行的最后一项数据就是用户登录取得的shell



编写shell script的注意事项:
1.指令是从上而下、从左而右分析并执行
2.如果读取到一个Enter符号,就尝试开始执行该行命令
3.可以使用 \[Enter] 进行分行
4.# 做注释


执行脚本
执行/home/zack/shell.sh:
1. 直接命令执行: shell.sh档案必须要具备r,x权限
2. 以bash程序执行: bash shell.sh 或 sh shell.sh
shell.sh 只要有r权限即可
3. 利用 source 来执行,在父程序中执行


特殊符号
双引号
  允许引用,\转义
单引号
  禁止引用、转义
反撇号,或者 $()
  以命令输出进行替换


前一个命令的状态值

$?    0为正常、非0异常


expr命令,计算表达式
如: expr 45 - 32
     expr 12 /* 11


$[]表达式,算式替换
如:  echo $[45+12]
      x=45;y=11;echo $[x-y]



变量递增,递减
let 变量名++
let 变量名--
let 变量名+=2



随机数
echo $RANDOM
echo $[RANDOM%100]


$(seq 1 100)  # seq 为 sequence(连续) 的缩写,从1到100的连续数
seq 首数 末数
seq 首数 增量 末数



生成随机字符串
head -n 1 /dev/urandom | md5sum | cut -b 1-8


test指令
利用test指令检测系统上某些档案或属性


中括号“[]”进行判断
如: [ "$HOME" == $"MAIL" ]
     [ "$yn" == "N" -o "$yn" == "n" ] 
-e 是否存在
-f 是否是文件
-d 是否是目录
-r 读权限read
-w 写权限write
-x 执行权限excution
-z 是否为空
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
! 否




script 参数
scriptname opt1  opt2  opt3  opt4
  $0       $1    $2    $3    $4
$# 参数个数
$@ 参数的全部内容



if判断语句
if []; then
  elif []; then
fi

case判断
1.以case开头,以esac结束
2.每一个变量用双引号括起来,以小括号")"结束
3.程序段落以";;"结束
4.用*来代表其他值


case  $变量名称 in <==关键词为 case ,还有变数前有钱字号 
  "第一个变量内容") <==每个变量内容建议用双引号括起来,关键词则为小括号 ) 
程序段 
;; <==每个类删结尾使用两个连续的分号来处理! 
  "第二个变量内容") 
程序段 
;; 
  *) <==最后一个变量内容都会用 * 来代表所有其他值 ,不包含第一个变量内容与第二个变量内容的其他程序执行段 
exit 1 
;; 
esac                  



在shell script 当中的 function 一定要在程序的最前面
函数名称代表示 $0 ,而后续接的参数也是以 $1, $2... 来表示的



循环
while [ condition ]  <==中括号内的状态就是判断式
do  <==do 是循环的开始!
程序段落
done  <==done 是循环的结束

until [ condition ]
do
程序段落
done

for var in con1 con2 con3 ...
do
程序段
done

for (( 初始值; 限制值; 执行步阶 ))
do
程序段
done


sh [-nvx] scripts.sh
选项参数:
-n  :不要执行 script,仅查询语法的问题;
-v  :在执行 sccript 前,先将 scripts 的内容输出到屏幕上;
-x  :将使用到的 script 内容显示到屏幕上,这是很有用的参数!


可使用 sh -x script.sh 来进行程序的 debug

你可能感兴趣的:(Linux那些事)