Press "Enter" to skip to content

Month: July 2017

Shell基础概念

Shell环境以及特性


什么是Shell

  • 解释器;
  • 操作系统的外壳

使用方式

  • 交互式——命令行
  • 非交互式——脚本

常见Shell程序种类

  • /etc/shells
  • 切换shell环境(chsh、usermod)

Bash基本特性

  • 快捷键、补全
  • 历史、别名
  • 标准输入输出
  • 重定向
  • 管道

历史命令

history

I/O设备与重定向

  • 标准输入 0 /dev/stdin
  • 标准输出 1 /dev/stdout
  • 标准错误 2 /dev/stderr

编写以及执行脚本

第一个Shell脚本

  • 什么是shell脚本;
    提前写好可顺序执行语句,能够完成特定任务
  • Shell脚本Helloworld的诞生
#!/bin/bash
echo "Hello world!"

脚本的构成以及执行

规范的脚本构成;

  • 脚本申明;
  • 注释;
  • 可执行语句

脚本的执行方式;

  • 命令
  • 参数

调试

  • 观察
  • sh -x开启调试模式
  • 在可能出错的地方设置echo

变量

变量的设置和取消

什么市变量

  • 固定名称存放;
  • 可能会变化的值;

定义、赋值、查看变量

  • 变量名=变量值;
  • 等号两边不能有空格;
  • 变量名由字母、数字、下划线组成,区分大小写;
  • 变量名不能以数字开头,不要使用关键字和特殊字符;

取消变量

  • 自动失效;
  • unset;

变量的种类

  • 存储类型;
  • 使用类型;

变量的分类

环境变量

  • /etc/profile
  • ~/.bash_profile
  • env\set
  • PWD\PATH\USER\LOGNAME\UID\SHELL\HOME

预定义变量

  • $0 当前所在进程或者脚本名;
  • $$ 当前PID号;
  • $?命令执行的返回状态,0正常、1异常;
  • $# 已加载的位置变量的个数;
  • $* 所有位置变量的值;

位置变量

  • 命令行参数
  • 表示为$n,n为序号;
  • $1 ${11};

变量值以及范围控制

扩展赋值操作

区分三种定界符 “” ’‘ ``

read标准输入取值

read

变量的作用范围

  • 局部变量
  • 全局变量

完数

一个正整数的因子是所有可以整除它的正整数。而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3(6的因子是1,2,3)。
现在,你要写一个程序,读入两个正整数n和m(1<=n<m<1000),输出[n,m]范围内所有的完数。
提示:可以写一个函数来判断某个数是否是完数。


输入格式:

两个正整数,以空格分隔。

输出格式:

其间所有的完数,以空格分隔,最后一个数字后面没有空格。如果没有,则输出一个空行。


输入样例:1 10
输出样例:6


#include<stdio.h>
#include<stdlib.h>

int main(){
    //输入整数变量 
    int n,m;
    do{
        scanf("%d",&n); 
        scanf("%d",&m);     
    }while(0>n&&n>=m&&m>999);
    //命名参数 
    int x,i;
    int sum;
    int count = 0;

    for(x=n;x<=m;x++){  
        sum =0;
        //判断是否是完数 
        for(i=1;i<x;i++){
            if(x%i == 0){
                sum += i;
                }
            }
            //是完数的话,计数器+1并输出 
            if(sum == x){
                count ++;
                if(count>1){
                    printf(" %d",x);
                }else{
                    printf("%d",x);
                }           
            }else{
                printf("");
            }
    }
    system("pause");
    return 0;
} 

分解质因数

每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数。比如,6可以被分解为2x3,而24可以被分解为2x2x2x3。

现在,你的程序要读入一个[2,100000]范围内的整数,然后输出它的质因数分解式;当读到的就是素数时,输出它本身。

输入格式:一个整数,范围在[2,100000]内。
输出格式:形如:n=axbxcxd或n=n。所有的符号之间都没有空格,x是小写字母x。
输入样例:18
输出样例:18=2x3x3

#include<stdio.h>
#include<stdlib.h>
int main(void){
    int n,i; 
    scanf("%d",&n);
    printf("%d=",n);

    for(i=2; i<=n; i++){
        while(n!=i){
            if(n%i==0){
                printf("%dx",i);
                n=n/i;
            }else{
                break;
        }
        }
    }
    printf("%d\n",n);
    return 0;
}