linux shell基础讲解

widuu 2013-9-13 Linux 2,800 0 喜欢 (0)

由于快要结婚了,这些日子一直很忙所以博客没有怎么更新,10月2号结婚所以十月份也要耽误一段时间,估计十一月份就正常更新了,到时候会增加一个栏目Object-c编程!
今天就简单的讲解一下shell编程吧!前提是同志们,我个人推荐大家先看下鸟哥私房菜基础篇,我也是看书学的没有别的,然后再在网上搜索一下!
shell
linux shell现在的基本用的都是bash的,脚本的头文件是#!/bin/bash,我们执行shell脚本有两种方式一种是bash 脚本 一种是 chmod 755 脚本 && ./脚本,写个hello word吧!
[php]
#!/bin/bash
echo "hello word"
[/php]
写入别名,譬如我的每当写vi调用的其实是vim
[php]
alias 查看系统中生效的别名
vi ~/.bashrc 写入别名,永久生效
alias vi='vim' 手工设定别名,临时生效
source ~/.bashrc
[/php]
文件输出和输入stdin 0 键盘输入stdout 1 显示器输出 stderr 2 显示器错误输出,我们可以输出重定向,重定向有两种一种追加的>>一种是覆盖的>
[php]
ls test >aa 覆盖的
ls test >>aa 追加的
ls test &>aa 错误正确的都输出到aa也可以使用 ls test >aa 2>>&1
[/php]
linux中也有这个&&如果前边的正确后边的才执行
[php]
ls test && cd test 前边的正确执行后边的,前边不正确后边的不执行
ls test || cd test 前边的错误执行后边的正好相反 用&& ||能做三元运算的效果
netstat -tlnu | grep 80 |用前边的做结果运行叫做管道符
[/php]
其中linux中查看变量用set 删除变量用unset 调用的时候可以用echo $变量名称
变量设定规则
1)变量以等号连接值,等号不能有空格
2)变量名由数字和字母和下划线组成,不能以数字开头
3)变量值中有空格,用引号括起来
4)双引号内,有特殊字符。如$
5)单引号中特殊字符无含义
6)在变量值中,可以使用\转义符
7)变量值可以直接调用系统命令。 `命令` $(命令)
8)变量值可以累加 aa=123 aa="$aa"456 echo $aa
环境变量必须大写!
变量参数的讲解
$? 上一个命令的返回值。 0 上一个命令正确执行 非0 上一个命令不正确
$# 统计命令的参数个数
$* 返回所有参数
$n 位置参数变量 譬如$0 就能显示第一个你输入的参数
键盘读取命令
read -p “提示信息” -t 等待时间 变量名
数值运算
变量值默认都是字符串型,要想进行数值运算。以下三种任选一种
1)declare方法
num1=123
num2=456
declare -i sum=$num1+$num2
2)sum=$(( $num1 + $num2 ))
3)sum=$(expr $num1 + $num2) 注意+左右必须空格
4)运算符
+ - \* / %取余
linux的正则表达式grep 这个其实很简单只要大家熟悉其他语言的正则表达式这个就很快了,看一下就可以了,这里就不多说了
命令提取符有两种,一种cut 一种awk
[php]
cut -d “分隔符” -f 提取列 文件名
more /etc/passwd | grep "/bin/bash" | cut -d ":" -f 1,3
提取passwd文件中可以登录的用户的用户名和UID
last | grep "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"|awk '{printf $1 "\t" $3 "\n"}'
[/php]
awk内置变量 FS 指定分隔符
more /etc/passwd | awk 'BEGIN {FS=":"} {printf $1 "\t" $3 "\n"}'
读取passwd文件,以":"为分隔符,截取第一和第三列
BEGIN 在截取前使分隔符生效。如果没有BEGIN,那么第一行自定义的分隔符不生效

linux的条件测试test
-e 文件是否存在 存在为真
-f 是否为普通文件
-d 目录
-b 区块设备
-c 字符设备
-r 是否可读
-w 是否可写
-x 是否可执行
-s 是否是非空白
文件比较
两个文件比较的 -nt 是否是最新 -ot 是否旧的 -eq 是否相等 -ne 是否不相等 -gt 大于 -lt 小于 -ge 大于等于 -le 小于等于
字符串比较
-z 是否为空 == 是否相等 != 不等于
多重判断
-a 逻辑与 -o 逻辑或 ! 逻辑非
流程控制语句
和其他语句一样都是 if else while for 等等
[php]
if 条件测试命令
then 命令序列
else 命令
fi
[/php]
多分支
[php]
if 条件测试命令1 ; then
命令序列1
elif 条件测试命令2 ; then
命令序列2
elif ...
else
命令序列n
fi
[/php]
for语句的
[php]
for 变量名 in 取值列表
do
命令序列
done
[/php]
case 语句 根据不同的条件判断
[php]
case word in
pattern )
;;
esac
[/php]
while的语句
[php]
while [[ condition ]]; do
#statements
done
[/php]

时间紧促所以就这样写了,然后我在虚拟机上安装了nginx然后写了一个nginx的启动脚本这样,就可以用service nginx start等命令了,放出来,大家没事练习一下,可以自己添加php-fpm这些就能够做一个完整的nginx启动脚本了
[php]
#!/bin/bash

DESC="nginx manage"
NAME="nginx"
MANAGE=/usr/local/nginx/sbin/$NAME
CONFIGFILE=/usr/local/nginx/conf/$NAME.conf
PID=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

test -x $MANAGE || exit 0

m_start(){
$MANAGE -c $CONFIGFILE || echo -n "nginx is already runing"
}

m_stop(){
kill -QUIT `cat $PID` || echo -n "nginx not runing"
}

m_reload(){
kill -HUP `cat $PID` && exit 1
}

case "$1" in
start )
echo -n "$DESC Starting $NAME "
m_start
echo "."
;;
stop )
echo -n "$DESC Stopping $NAME "
m_stop
echo "."
;;
restart )
echo -n "$DESC Restart $NAME "
m_reload
echo "."
;;

esac

[/php]

转载请注明来自微度网络,本文标题:《linux shell基础讲解》

喜欢 0 发布评论
Top