Linux 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